Q1) если я присваиваю переменную, подобную этой, нужно ли мне ее освобождать?
NSString *line = @""; // is this a correct way of doing things?
[line release]; // do i have to release it?
Ответ Нет @ "" - это макрос, который создает авто-релиз NSString
Q2)
NSString *line2 = [[NSString alloc] initWithString:@"Hello"];
NSString *line3 = line2;
[line2 release];
Ответ Вы создаете строку 2 (с init), следовательно, вы должны отпустить ее.Вам не нужно освобождать line3, так как он указывает только на line2, поэтому вы должны перезагружать line2.
Q3) У меня есть переменная, объявленная в файле .h, как
NSString *line5;
Тогда у меня есть
@property (nonatomic,retain) NSString *line5;
что это значит?Должен ли я сделать это, чтобы использовать переменные?Что означает «неатомический» и «сохранить»?
Ответ Вы можете думать о @property
как о поведении своего свойства, чтобы при использовании @synthezie
компилятор узналкак интерпретировать геттеры и сеттеры для этого свойства.
Q4) Что означает @synthesize
line5;do
Ответ Создает методы получения и установки вашего объявленного свойства на основе параметров, выбранных в @property(option,option...)
Q5)
-(void) myFunction
{
NSString *line2 = [[NSString alloc] initWithString:@"Hello"];
line5 = line2;
[line2 release];
}
Вот чтопроизойдет с line5 после вызова этой функции?Будет ли это существовать?Как сделать значение доступным после вызова функции?
Ответ функция создает новую строку 2, затем назначает строку 5 в качестве указателя на строку 2, а затем вы освобождаете строку 2, что является проблемой.b / c line5 теперь ни на что не указывает.Вы должны сохранить строку 5, чтобы иметь возможность указывать на строку 2.
Как мне вызвать эту функцию для получения строкового вывода?
Ответ Вы вызываете эту функцию следующим образом:
[self myFunction2];
Окончательно Вы должны прочитать это управление памятью http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html#//apple_ref/doc/uid/10000011-SW1