当合成的设置器试图释放未定义的myArray对象时,为什么这个常见的属性初始化方案不会有失败的风险?或者属性对象被自动初始化为nil,而我根本不需要这样做?
@interface myClass : NSObject {
NSArray* myArray;
}
@property (nonatomic, retain) NSArray* myArray;
@end
@implementation myClass
@synthesize myArray;
-(id)init {
if ( self = [super init] ) {
self.myArray = nil;
}
return self;
}
...
发布于 2010-11-12 23:11:00
正如其他人所说的,实例变量已经初始化为nil
。
此外,实例变量应该直接在init
方法中设置,因为类(或其子类)的as per Apple's documentation /setter方法可能依赖于完全初始化的实例。
发布于 2010-11-13 00:20:26
Objective-C中的对象实例变量默认初始化为nil
。此外,允许使用消息传递nil
(不像在Java、C#或C++等函数调用语言中调用null
上的方法)。向nil
发送消息的结果是nil
,这个调用的[nil release];
只是nil
,而不是异常。
另外,最佳实践是直接在-init
和-dealloc
方法中分配/调用实例变量:
-(id)init {
if ( self = [super init] ) {
myArray = nil;
}
return self;
}
- (void)dealloc {
[myArray release];
[super dealloc];
}
发布于 2010-11-12 22:59:33
它已经初始化为nil
。
https://stackoverflow.com/questions/4165872
复制相似问题