Разница между сохранением - PullRequest
2 голосов
/ 10 июня 2011

в чем разница между этими удержаниями?:

@property (nonatomic, retain) NSString *A_StringToRetain;

и

NSString *B_StringToRetain;
B_StringToRetain = [[MyClass GetStringValue] retain];

Поскольку при использовании свойства строка не будет сохраняться и использоваться вторые пути, все хорошо, но мне нужно проверить и освободить, чтобы избежать утечек.


Пример :
Я объявил в .h

NSString *A_StringToRetain;
@property (nonatomic, retain) NSString *A_StringToRetain;

в .m я использую

A_StringToRetain = @"MyValue";

но когда я выхожу из метода, я потерял A_StringToRetain. Это зомби.

Если я не использую свойство и объявляю строку таким образом

NSString *B_StringToRetain;
B_StringToRetain = [[MyClass GetStringValue] retain];

строка находится в памяти.


Кто-нибудь скажет, почему, пожалуйста?
Это не так, как распределять / сохранять?
Какие отличия?

спасибо.

1 Ответ

1 голос
/ 10 июня 2011

Вы устанавливаете переменную напрямую и НЕ проходите через свойство (которое применяет сохранение) ... вам либо нужно ...

self.A_StringToRetain = someString;

или

[self setA_StringToRetain:someString];

ключом здесь является self., что означает, что вы проходите через свойство, а не непосредственно к самому ивару.

...