要返回NSArray或NSDictionary,我看到大多数人都使用以下实现,这也是一些书籍的建议。 (iOS开发实用方法 - )
选项1
-(NSArray*)listOfStudents{
NSMutableArray *temp = [[NSMUtableArray alloc] init];
//Add elements to the array
//
//
//
NSArray *students = [NSArray arrayWithArray:temp];
return students;
}
-(void)viewWillAppear{
self.studentsList = [self listOfStudents];
}
但同样可以通过以下方式完成吗?
选项2
-(NSArray*)newListOfStudents{
NSMutableArray *temp = [[NSMUtableArray alloc] init];
NSArray *students = [[NSArray alloc]initWithArray:temp];
[temp release];
//Add elements to the array
//
//
//
return students;
}
-(void)viewWillAppear{
NSArray *array = [self newListOfStudents];
self.studentsList = array;
[array release];
}
假设在主线程本身中调用这些方法。
内存使用的间隔,我认为第二个选项是好的,因为它不会创建自动释放的对象,因为它们仅在自动释放池耗尽时才会释放。
我假设只有在应用程序退出时,主要自动释放池才会耗尽。因此,如果OPTION 1中的方法被多次使用,(因为它们在ViewWillAppear中被调用),我认为许多列表将在自动释放池中,只有在应用程序退出时才会释放。
OPTION 2方法也是更好的方法吗?
更新:
我已更新了viewWillAppear实现,以便更清晰。
答案 0 :(得分:2)
我想想在你要打电话的第二个例子中
self.studentsList = [self newListOfStudents];
如果studentsList
是retain
ed属性,现在就会泄漏。
此外,两个示例中的临时数组都是无用的开销。在第二个例子中,这简直是胡说八道。
最干净的解决方案是
-(NSArray *)listOfStudents {
NSMutableArray *list = [NSMutableArray array];
// Add things to array
return list;
}
另外两个建议:
1)您可以在代码上运行静态分析器,这将指向内存问题 2)如果您对内存管理更有信心,请切换到ARC。