Я просматривал чей-то код и заметил, что они вызвали 'release' для строки NSSt, которой они не владеют (никогда нигде не вызывали alloc / retain / copy, и это не было свойством).
Это выглядело немного странно для меня, и это заставило меня задаться вопросом, может ли происходить какое-то странное поведение, если вы вызываете 'release' для объекта, который вы либо не "владеете", либо чей счетчик ссылок уже равен 0? Приведенный ниже код компилируется / работает нормально без предупреждений, так что, думаю, проблем нет, но мне было просто любопытно.
// Releasing an object I don't own
NSString *notMyString = [NSString stringWithString:@"Not mine."];
[notMyString release]; // Ignored?
// Releasing an object I own, twice
NSString *myString = [[NSString alloc] initWithString:@"Mine."];
[myString release]; // Ref count = 0
[myString release]; // Ref count = ?