代码之家  ›  专栏  ›  技术社区  ›  fuzzygoat

在init中使用属性访问ivar?

  •  3
  • fuzzygoat  · 技术社区  · 14 年前

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

    // 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;
    }
    

    编辑: 补充 retain 至版本002

    1 回复  |  直到 14 年前
        1
  •  3
  •   Chuck    14 年前

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