将init中的self分配给不同的指针

时间:2016-10-21 15:12:25

标签: objective-c cocoa cocoa-touch automatic-ref-counting

有什么暗示,当我不将自我分配给它的超级初始化,而是指向一个完全不同的指针,甚至是静态指针?弧会表现正常吗?这种行为的含义是什么?

static NSObject * StaticObject;

- (instancetype)init {

    self = StaticObject;
    if (self) {

    }
    return self;
}

2 个答案:

答案 0 :(得分:2)

ARC会表现得很好。初始化StaticObject时会遇到问题。你可以做点什么

if (StaticObject == nil) {
    self = [super init];
    StaticObject = self;
} else {
    self = StaticObject;
}

我认为NSNull类会做那样的事情。

假设StaticObject不是nil并且已经初始化,如果修改StaticObject,则会引起混淆,因为其他人可能会持有对它的引用。

答案 1 :(得分:0)

我不确定这是否安全。我想你会泄漏原始自我的记忆,并可能在以后过度释放你的单身。 ARC不是魔术,它只是偷偷进入调用者的保留/释放调用,你的逻辑可能永远不会让ARC看到alloc调用的结果。