Вы никогда не должны отделять alloc
и init
.init
часто меняет объект за кулисами!Попробуйте
NSString* foo=[NSString alloc];
NSLog(@"%p %@", foo, [foo class]);
foo=[foo initWithString:@"bar"];
NSLog(@"%p %@", foo, [foo class]);
Вы увидите что-то вроде
2010-07-14 01:00:55.359 a.out[17862:903] 0x10010d080 NSPlaceholderString
2010-07-14 01:00:55.363 a.out[17862:903] 0x100001070 NSCFString
Это показывает, что +[NSString alloc]
на самом деле ничего не выделяет;скорее то, что делает работа, это initWithString
сама.Я не думаю, что UIAlertView
делает это, но вы никогда не знаете.
Подводя итог: никогда не разъединяйте alloc
и init
.Я думаю, что статический анализатор просто предполагает, что все используют [[... alloc] init]
, так что он запутался в вашем коде.Анализатор должен был предупредить вас не разъединять alloc
и init
.