я вывешу недостаток 3 варианты метода образца, который использует autorelease известного метод stringByAppendingString (не Дуга образец проект в Xcode 4.6.2.IOS проекта)stringByAppendingString и сохранить дилемма
образец Блок 1:. Ничего не возвращает. просто странные точки к nothing.but не null.
Пример блока 2: ничего не возвращает !.
Пример блока 3: возвращает A1A2A3. как и ожидалось, но я думаю, что у него есть утечка.
Мои вопросы:
a) образец метода 1 работает как ожидалось в проекте MAC. Но не в проекте IOS.
б) блок образца 3 - включает утечку?
c) посмотреть комментарии в примере блока 2. word_ становится A1, A1A2 и ничего.
d) что бы вы поделили свой собственный метод одним и тем же способом? Я ищу безопасный стандартный метод.
спасибо.
ОБРАЗЕЦ БЛОК 1
-(NSString*)sampleMethod
{
NSString *[email protected]"";
NSString *[email protected]"A1";
NSString *[email protected]"A2";
NSString *[email protected]"A3";
word_=[word_ stringByAppendingString:a1];// word_ is A1
word_=[word_ stringByAppendingString:a2];// word is nothing but another pointer
word_=[word_ stringByAppendingString:a3];// word is nothing too but pointer changed.
return word_;
}
ОБРАЗЕЦ БЛОК 2
-(NSString*)sampleMethod
{
NSString *[email protected]"";
NSString *[email protected]"A1";
NSString *[email protected]"A2";
NSString *[email protected]"A3";
word_=[word_ stringByAppendingString:a1];// word_ is A1
word_=[[word_ stringByAppendingString:a2]retain];// word is A1A2
word_=[[word_ stringByAppendingString:a3]retain];// word is nothing !
return word_;
}
ОБРАЗЕЦ БЛОК 3
-(NSString*)sampleMethod
{
NSString *[email protected]"";
NSString *[email protected]"A1";
NSString *[email protected]"A2";
NSString *[email protected]"A3";
word_=[[word_ stringByAppendingString:a1]retain];// word_ is A1
word_=[[word_ stringByAppendingString:a2]retain];// word_ is A1A2
word_=[[word_ stringByAppendingString:a3]retain];// word_ is A1A2A3
return word_;//returns as expected but I think leaks method in this method.
}
Мой ответ: Просто потому, что я ничего не сделал неправильно. И собрал значения переменных по этапам отладки очень резкие.
но как-то он решен после чистого проекта. Надеюсь, это может сэкономить часы для кого-то. Или не знаете, что что-то пошло не так в адресах чипов памяти.
если ваш код не выполняет то, что он должен сделать, поставить в точку останова и проверить его, если вы видите, что он не выполняет то, что говорит код, пора очищать. –
FYI, идиоматический способ написать это 'NSString * word_ = [NSString stringWithFormat: @"% @% @% @ ", a1, a2, a3]'. – Chuck
Я думаю, что это был просто пример, чтобы понять, как работает управление памятью. В противном случае он мог бы вернуться @ "A1A2A3". –