【问题标题】:Should we declare properties' ivars or let the compiler do it for us? What about weak properties?我们应该声明属性的 ivars 还是让编译器为我们做呢?弱属性呢?
【发布时间】:2011-12-24 05:32:41
【问题描述】:

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

【问题讨论】:

  • 编译器实际上会阻止您声明具有与关联 ivar 不同的所有权限定符的属性。

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


【解决方案1】:

我通常不声明 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 方法,这可能是个问题。

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

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 2019-06-10
    • 2016-03-22
    • 1970-01-01
    • 2014-03-29
    • 2012-05-26
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多