Ребята: Пожалуйста, помогите. У меня есть класс утилиты, который возвращает NSString с кодировкой. Как это:Должен ли я освободить этот NSString?
/*Get a NSString with chinese encoding*/
+(NSString*) getGBKString:(void *)buffer
{
NSString* string = [[[NSString alloc]
initWithBytes:buffer
length:sizeof(buffer)
encoding:kCFStringEncodingGB_18030_2000]
autorelease];
return string;
}
Здесь autorelease
это правильно делать?
Если это так, вызывающий метод должен вызывать удержание, чтобы освободить объект NSString?
Поблагодарите Kenny и Jacob сначала. Но я немного смущен. Как вы сказали, -autorelease изменят счетчик удержания на 0, то экземпляр NSString должен быть отменен перед возвратом, правильно? Тогда вызывающий получит нуль? – icespace
Счет сохранения упадет до 0 только после того, как пул авторезистов будет слит. –
@icespace: '-autorelease' в основном« релиз позже ». Когда вы вызываете '-autorelease', право собственности будет передано в пул авто-релизов, который будет« освобождать »его при прогоне цикла. Эффект подобен возврату «умирающего» объекта (но все еще действительного) значения удержания 0. – kennytm