属性默认为零吗?
如果我不使用 ivar 作为属性,但这样做:
@interface someClass : NSObject
@property (nonatomic, retain) NSArray * someArray;
@end
@implementation someClass
@synthesize someArray = _someArray;
- (void) someMethod
{
if( self.someArray == nil ){
// True on the first call?
}
}
@end
第一次检查 self.someArray
时,它返回 nil
,_someArray
也是如此>,但是这是有保证的吗?我只读到 ivars 保证为 nil
,并且由于我没有声明 ivar(_someArray
不是 ivar),我不确定它是否会nil
无处不在、每时每刻。
If i don't use an ivar for properties, but do this:
@interface someClass : NSObject
@property (nonatomic, retain) NSArray * someArray;
@end
@implementation someClass
@synthesize someArray = _someArray;
- (void) someMethod
{
if( self.someArray == nil ){
// True on the first call?
}
}
@end
The first time I check self.someArray
it returns nil
, as does _someArray
, but is this guaranteed? I read only that ivars are guaranteed to be nil
, and since I don't declare a ivar (_someArray
is not an ivar), I am not sure if it will be nil
everywhere and every time.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
总是为零。 Objective-C 在分配类时将其所有变量初始化为 nil。合成的 ivars 遵循相同的规则。
It's always nil. Objective-C initialises all the variables in a class to nil when it is allocated. Synthesised ivars follow the same rules.
如果属性是自动合成的,则由实例变量支持 - 所以是的,默认情况下此类属性将返回 nil。
Properties are backed by instance variables if they are synthesized automatically -- so yes, by default such properties will return
nil
.是的,所有属性、ivars 和静态变量始终被定义为初始化为
nil
。现在,有了 ARC,这就会转移到__strong
堆栈变量(__strong
是所有对象指针的默认值)。Yes, all properties, ivars and static variables have always been defined to be initialized to
nil
. Now with ARC this carries over to__strong
stack variables (__strong
being the default for all object pointers).