专家: 请帮忙。我有一个实用程序类来返回带编码的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
是正确的做法吗?
如果是这样,方法调用者应该调用retain incase NSString对象被释放?
答案 0 :(得分:6)
这里
autorelease
是正确的做法吗?
是。由于该方法不包含+alloc
/ new
/ copy
,因此要跟随Cocoa memory management rules,您应该返回一个没有所有权的对象。
或者,您可以将方法重命名为+newGBKString:
并删除-autorelease
,然后知道约定的人就会知道调用者将获得所有权。
如果是这样,方法调用者应该调用retain incase NSString对象被释放?
如果要保留NSString,调用者应该-retain
。