我应该发布这个NSString吗?

时间:2010-10-19 06:47:35

标签: objective-c cocoa

专家:   请帮忙。我有一个实用程序类来返回带编码的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对象被释放?

1 个答案:

答案 0 :(得分:6)

  

这里autorelease是正确的做法吗?

是。由于该方法不包含+alloc / new / copy,因此要跟随Cocoa memory management rules,您应该返回一个没有所有权的对象。

或者,您可以将方法重命名为+newGBKString:并删除-autorelease,然后知道约定的人就会知道调用者将获得所有权。

  

如果是这样,方法调用者应该调用retain incase NSString对象被释放?

如果要保留NSString,调用者应该-retain