iphone - 使用属性访问 init 中的 iVars?

标签 iphone objective-c cocoa-touch

这是上一个问题的分支,这是不好的做法(使用属性设置 iVars)吗?

// Designated initializer 001
- (id)initWithName:(NSString *)newName andType:(NSString *)newType {
    self = [super init];
    if(self) {
        [self setName:newName];
        [self setType:newType];
    }
    return self;
}

或者我应该使用...

// Designated initializer 002
- (id)initWithName:(NSString *)newName andType:(NSString *)newType {
    self = [super init];
    if(self) {
        name = [newName retain];
        type = [newType retain];
    }
    return self;
}

我一直在使用版本 001,但被引导相信在 init 或 dealloc 中使用属性访问 iVars 是不好的做法。

编辑: 添加 retain 到版本 002

加里。

最佳答案

是的,苹果 discourages在 init 或 dealloc 中使用访问器,因为除了设置实例变量之外,它们还会产生副作用。这些在未初始化或已销毁的对象中显然是不受欢迎的。

文档中的确切引述:“唯一不应该使用访问器方法设置实例变量的地方是 init 方法和 dealloc。”

关于iphone - 使用属性访问 init 中的 iVars?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4091062/

相关文章:

iphone - NSURLRequest 设置 HTTP header

ios - 创建 CGRect 作为关联对象?

objective-c - 是否有等效于 C#'s ' var' 关键字的 Objective-C?

ios - 单个 UICollectionViewController 中的多个自定义单元格,通过 NavigationBarButton 在之间循环

cocoa - 计算字符串值?

iphone - 将 NSMutableArray 存储在 NSArray 中?

iphone - 创建NSDictionary的NSDictionary

iphone - 需要两次才能取消选择 UITableView 中的accessoryType

iphone - 从 iPhone 上的视频输出获取静态图像?

iphone - shopkick 应用程序 UI 小部件