首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Objective-C init方法的正确语法

Objective-C init方法的正确语法
EN

Stack Overflow用户
提问于 2010-11-12 22:57:43
回答 3查看 44.7K关注 0票数 21

当合成的设置器试图释放未定义的myArray对象时,为什么这个常见的属性初始化方案不会有失败的风险?或者属性对象被自动初始化为nil,而我根本不需要这样做?

代码语言:javascript
复制
@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;
}

...
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-12 23:11:00

正如其他人所说的,实例变量已经初始化为nil

此外,实例变量应该直接在init方法中设置,因为类(或其子类)的as per Apple's documentation /setter方法可能依赖于完全初始化的实例。

票数 13
EN

Stack Overflow用户

发布于 2010-11-13 00:20:26

Objective-C中的对象实例变量默认初始化为nil。此外,允许使用消息传递nil (不像在Java、C#或C++等函数调用语言中调用null上的方法)。向nil发送消息的结果是nil,这个调用的[nil release];只是nil,而不是异常。

另外,最佳实践是直接在-init-dealloc方法中分配/调用实例变量:

代码语言:javascript
复制
-(id)init {
    if ( self = [super init] ) {
        myArray = nil;
    }
    return self;
}

- (void)dealloc {
    [myArray release];
    [super dealloc];
}
票数 27
EN

Stack Overflow用户

发布于 2010-11-12 22:59:33

它已经初始化为nil

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4165872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档