Простой случай: если вы используете init, вы несете ответственность за его освобождение, либо вызывая release, либо вызывая autorelease.
например,
NSString *myString = [NSString alloc] init]; // You need to release this
...
[myString release]; // Now it's released - don't use it again!
или если вы собираетесьотдайте его кому-то еще
NSString *myString = [NSString alloc] init]; // This needs releasing
...
return [myString autorelease]; // You are finished with it but someone else might want it
Однако есть еще несколько случаев.
NSString *myString = [NSString stringWithFormat:@"hi"];
Этот объект уже находится в пуле автоматического выпуска - не отпускайте его!
NSString *secondString = [myString copy];
Этот объект нужно освободить - он не автоматически выпущен.
Правило большого пальца : что-нибудь с именем init, copy или new - вы сделалиэто, вы отпускаете это.Все остальное будет автоматически выпущено.