2016-10-21 2 views
0

Есть ли какие-либо импликации, когда я не назначаю себя самому супер-init, но совершенно другому указателю, даже статическому? Будет ли вести себя правильно? каковы последствия такого действия?Назначение self в init другому указателю

static NSObject * StaticObject; 

- (instancetype)init { 

    self = StaticObject; 
    if (self) { 

    } 
    return self; 
} 

ответ

2

ARC будет вести себя отлично. У вас возникнет проблема с инициализацией StaticObject. Вы могли бы сделать что-то вроде

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

Я бы подумал, что класс NSNull делает что-то подобное.

Предполагая, что StaticObject не является нулевым и был инициализирован, вы будете создавать путаницу, если вы измените StaticObject, так как другие могут ссылаться на него.

0

Я не уверен, что это безопасно. Я думаю, что вы будете утечка памяти оригинального «я» и, возможно, позже перевыполним ваш синглтон. ARC не является магии, он просто пробирается в вызовы сохранения/выпуска в вызывающем устройстве, и ваша логика, вероятно, никогда не позволит ARC увидеть результат вызова alloc.

Смежные вопросы