我们应该声明属性'ivars还是让编译器为我们做?弱势属性怎么样?

时间:2011-11-08 07:21:58

标签: objective-c properties ios5 automatic-ref-counting

我想了解是否有任何优势来声明属性ivars而不是让编译器为我们做,只考虑为IOS5构建代码。我认为最好的做法不应该是声明它们,如果相应的属性被声明为弱,你应该记住将ivars声明为__weak的事情。有必要这样做,对吧?否则,默认情况下,弱属性被分配给强大的ivar,并且它不再是弱...

1 个答案:

答案 0 :(得分:2)

我通常不会声明ivar,而是通过@property来完成。但是,在@synthesize语句中,我指定了用于实现的ivar的名称:

@interface MyClass
@property (weak) NSString* myString;
@end

@implementation MyClass
@synthesize myString = _myString;
@end

上面的@synthesize语句中的= _myString完全是可选的,但它有助于强制区分直接在您的代码中访问ivar和尝试使用属性访问器,因为直接使用ivar用下划线键入它。例如,如果您变得懒惰并尝试myString=@"xyz",则会收到警告,因此您会提醒您考虑是否要使用self.myString_myString。如果您只是@synthesize myString而没有指定不同的ivar名称,那么在这种情况下您将不会收到编译器警告。如果您实现了自定义setter方法,那么这可能是个问题。

这感觉就像宣布伊娃的方式更为清洁;例如,在这种情况下,您不需要声明__weak修饰符,因为如果您使用此语法则暗示它。