我想了解是否有任何优势来声明属性ivars而不是让编译器为我们做,只考虑为IOS5构建代码。我认为最好的做法不应该是声明它们,如果相应的属性被声明为弱,你应该记住将ivars声明为__weak的事情。有必要这样做,对吧?否则,默认情况下,弱属性被分配给强大的ivar,并且它不再是弱...
答案 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
修饰符,因为如果您使用此语法则暗示它。