#objective-c #memory #nsstring #memory-management #retain
#objective-c #память #nsstring #управление памятью #сохранить
Вопрос:
в чем разница между этими сохранениями?:
@property (nonatomic, retain) NSString *A_StringToRetain;
и
NSString *B_StringToRetain;
B_StringToRetain = [[MyClass GetStringValue] retain];
Поскольку при использовании property строка не сохраняется и при использовании вторых способов, все в порядке, но мне нужно проверить и освободить, чтобы избежать утечек.
Пример:
я объявил в .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:
Вы устанавливаете переменную напрямую, а не проходите через свойство (которое применяет сохранение)… вам либо нужно…
self.A_StringToRetain = someString;
или
[self setA_StringToRetain:someString];
Ключевым моментом здесь является self.
, что означает, что вы переходите через свойство, а не непосредственно к самому ivar.
Комментарии:
1. Отлично! Я тупой! 🙂 Теперь это понятно и, очевидно, работает! Спасибо.