首页
学习
活动
专区
圈层
工具
发布

分配ivar
EN

Stack Overflow用户
提问于 2011-03-03 04:13:54
回答 2查看 138关注 0票数 1

为什么我不能简单:

代码语言:javascript
复制
self.list = [[NSArray alloc] initWithObjects: @"Who Hash", @"Bubba Gump Shrimp Étouffée", @"Who Pudding", @"Scooby Snacks", @"Everlasting Gobstopper", @"Green Eggs and Ham", @"Soylent Green", @"Hard Tack", @"Lembas Bread", @"Roast Beast", @"Blancmange", nil];

而不是:

代码语言:javascript
复制
NSArray *array = [[NSArray alloc] initWithObjects:@"Who Hash", @"Bubba Gump Shrimp Étouffée", @"Who Pudding", @"Scooby Snacks", @"Everlasting Gobstopper", @"Green Eggs and Ham", @"Soylent Green", @"Hard Tack", @"Lembas Bread", @"Roast Beast", @"Blancmange", nil];
self.list = array;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-03 04:23:16

你发布的两种方法都在泄漏。

假设list声明为如下所示的属性...

代码语言:javascript
复制
@property (nonatomic, retain) NSArray *list;

然后我们知道,当通过合成的设置器设置列表时,使用self.list = xxx,它将被保留,保留计数为1。此外,通过调用alloc/init,保留计数再次上升到2。话虽如此,我们可以用一种内存安全的方式重写你的两种方法,就像这样……

代码语言:javascript
复制
self.list = [[[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil] autorelease];

self.list = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];

代码语言:javascript
复制
NSArray *array = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil];
self.list = array;
[array release];
票数 2
EN

Stack Overflow用户

发布于 2011-03-03 04:21:18

实际上你可以的。但是如果list属性被声明为retain,你必须这样做:

代码语言:javascript
复制
self.list = [[[NSArray alloc] initWithObjects: @"Who Hash", @"Bubba Gump Shrimp Étouffée", @"Who Pudding", @"Scooby Snacks", @"Everlasting Gobstopper", @"Green Eggs and Ham", @"Soylent Green", @"Hard Tack", @"Lembas Bread", @"Roast Beast", @"Blancmange", nil] autorelease];

或者甚至更短:

代码语言:javascript
复制
self.list =  [NSArray arrayWithObjects: "Who Hash", @"Bubba Gump Shrimp Étouffée", @"Who Pudding", @"Scooby Snacks", @"Everlasting Gobstopper", @"Green Eggs and Ham", @"Soylent Green", @"Hard Tack", @"Lembas Bread", @"Roast Beast", @"Blancmange", nil];

否则你会被泄露的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5172865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档