ecl*_*lux 20 iphone objective-c ios
当合成的setter尝试释放未定义的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;
}
...
Run Code Online (Sandbox Code Playgroud)
Bar*_*ark 26
Objective-C中的对象实例变量nil默认初始化为.此外,nil允许消息传递(与null在Java,C#或C++等函数调用语言中调用方法不同).消息的结果nil是nil,这个调用[nil release];只是nil,而不是例外.
另外,最佳做法是直接在-init和-dealloc方法中分配/调用实例变量:
-(id)init {
if ( self = [super init] ) {
myArray = nil;
}
return self;
}
- (void)dealloc {
[myArray release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
pau*_*ley 13
正如其他人所说,实例变量已初始化为nil.
另外,根据Apple的文档,实例变量应该直接在init方法中设置,因为类(或其子类)的getter/setter方法可能依赖于完全初始化的实例.
| 归档时间: |
|
| 查看次数: |
40066 次 |
| 最近记录: |