2014-08-28 85 views
-1

我有这样的属性:@property (nonatomic, assign, readonly) CGRect frame;在example.h文件中,我认为这个语句是告诉其他类frame属性是只读的,它也告诉编译器不需要综合setter方法。 是否正确地表示类本身可以在.m文件中使用实例变量_frame(self.frame仍然不能使用)?如果是这样,有没有更好的方式来使用这个实例变量_frame?重新声明这个属性的类扩展为读写或重新声明在类扩展这样的实例变量(我发现有很多人这样写,但我不知道这样做有什么好处呢?):有没有更好的方法来写OC的财产?

@interface example() { 
    CGRect _frame; 
} 
@end 

@implementation example 

或我只需要什么都不做?

+0

[我应该使用属性还是实例变量?](http://www.bignerdranch.com/blog/should-i-use-a-property-or-an-instance-variable/) – twodayslate 2014-08-28 06:44:48

回答

0

我对财产的理解如下: 1.程序在使用点算符(。)时,在接收方的类中找到财产的名称。 像这样:tt.frame(example * tt = [[example alloc] init];)

2.然后程序找到属性名称(绑定与合成方法同名的属性名称)和实例变量。 这样做的方法是:@synthesize frame = _frame;如果你不这样做,编译器会提供一个实例变量(框架,然后修改这个框架,而不是你设计的_frame。)。框架是属性的名称,框架是实例变量。 )当你选择64位环境。或编译器会给你一个警告,如果你选择32位环境)

3.实际变量的调用方法。

+0

我只是不明白编译器已经为我提供了一个实例变量,为什么我应该在类扩展中自己再次写实例变量? – Joiner 2014-08-31 03:11:09

相关问题