Если вы хотите, чтобы какое-либо свойство было сохранено, рекомендуется объявить свойство как сохраняемое и использовать self. Приведенный выше код подвержен утечке памяти, поскольку вы сохраняете что-то в одном методе и, вероятно, освобождаете их в другом месте. Это вызовет много хлопот, так как оба метода связаны друг с другом, но это не зависит от логики вашего приложения. (Страшно !! Вы должны помнить это, когда будете читать код позже. Или задокументировать, если вы хотите, чтобы кто-то еще посмотрел ваш код ...)
В такие моменты, когда я хочу, чтобы какая-то переменная была сохранена и все еще не хотел использовать свойство retain в заголовке, я создаю расширение и переопределяю этот атрибут, а затем использую self.
MyClass.h
@interface MyClass : NSObject
{
SomeClass *someObject; //Example
...
}
@property (nonatomic) SomeClass *someObject;
...
@end
MyClass.m
@interface MyClass () //Category
@property (nonatomic, retain) SomeClass *someObject;
@end
@implementation MyClass
...
// Use self.someObject and the object will be retained.
// Release that object in dealloc.
@end
РЕДАКТИРОВАТЬ: То же самое относится и к NSString, как ваш случай. Просто замените retain
на copy
, так как это рекомендуется для NSString.