为什么我不能简单:
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];而不是:
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;发布于 2011-03-03 04:23:16
你发布的两种方法都在泄漏。
假设list声明为如下所示的属性...
@property (nonatomic, retain) NSArray *list;然后我们知道,当通过合成的设置器设置列表时,使用self.list = xxx,它将被保留,保留计数为1。此外,通过调用alloc/init,保留计数再次上升到2。话虽如此,我们可以用一种内存安全的方式重写你的两种方法,就像这样……
self.list = [[[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil] autorelease];或
self.list = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
或
NSArray *array = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil];
self.list = array;
[array release];发布于 2011-03-03 04:21:18
实际上你可以的。但是如果list属性被声明为retain,你必须这样做:
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];或者甚至更短:
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];否则你会被泄露的。
https://stackoverflow.com/questions/5172865
复制相似问题