Obj-C,如何释放 NSString 返回值?

发布于 2024-10-12 06:43:26 字数 273 浏览 1 评论 0 原文

我试图在函数中从数据库中获取 NSString 值,但是我不断收到分析器警告。这是我的代码......

- (NSString*)getCategoryDesc:(int)pintCid { 
NSString *ret;
ret = value from my db ...  
return [ret autorelease];
}

它不喜欢

return ret;
return [ret retain];

I'm trying to gain a NSString value from my database in a function, however I keep get analyzer warnings. Heres my code...

- (NSString*)getCategoryDesc:(int)pintCid { 
NSString *ret;
ret = value from my db ...  
return [ret autorelease];
}

It doesn't like

return ret;
return [ret retain];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜空下最亮的亮点 2024-10-19 06:43:26

关键点(您没有向我们展示)是:“来自我的数据库的值”是做什么的?

如果它正在做类似的事情,

ret = [[NSString alloc] initWithString:@"something"];

那么您有责任释放该对象,但如果它正在做类似的事情,

ret = [NSString stringWithString:@"something"];

您不需要释放它(实际上,您一定不能)。

因为你的方法被命名为“get*”(而不是“create*”),所以你需要返回一个调用者不拥有的对象(通常,这意味着一个自动释放的对象)。

阅读 对象所有权策略规则

The key point (which you're not showing us) is: what does "value from my db" do?

If it's doing something like:

ret = [[NSString alloc] initWithString:@"something"];

then you are responsible for releasing the object, but if it's doing something like

ret = [NSString stringWithString:@"something"];

you do not need to release it (and, indeed, you must NOT).

Because your method is named "get*" (and not "create*"), you need to return an object that the caller does not own (generally, that means an autoreleased object).

Read up on the object ownership policy rules.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文