NSMutableArray *a1 = [[NSMutableArray alloc] init];NSMutableArray *a2 = [NSMutableArray array];TempObj *obj = [[TempObj alloc] init]; //assume this line is repeated for each obj[a1 addobject:obj];[a1 addobject:obj2];[a1 addobject:obj3];[a1 addobject:obj4];[obj release];[obj2 release];[obj3 release];[obj4 release];[a1 release];
好吧,所以a2是一个autorelease obj所以我不必要调用释放它?另外你怎么知道什么时候得到一个自动释放对象?
而对于a1,我不必首先循环遍历数组并释放每个对象?如果我打电话给[a1 removeAllObjects];那个调用[[a1 objectAtIndex:#] release];
我应该在将它们添加到数组后释放这些对象吗?
解决方法 当您将对象添加到数组时,它会在该对象上调用retain。如果你不释放你指向该对象的指针,那将是一个漏洞。当你释放数组时,它会调用它所拥有的所有对象的释放,因为它之前调用了保留。至于autorelease vs release,唯一可以知道的方法(除了可能读取文档外)是以该方法的名称。我相信一般的规则是,如果你没有分配对象,那么你不负责释放它。
关于对象创建方法,所有方便的方法(array :,arrayWithObjects :,arrayWithArray:等)都返回自动释放的对象。但是,它们相应的init方法(init :,initWithObjects :,initWithArray等)不会 – 如果调用它们,则负责调用返回的对象的释放。
我似乎回想起了关于这个话题的其他一些问题 – 你可以尝试搜索一下更彻底的解释。
总结以上是内存溢出为你收集整理的iphone – NSMutableArray内存管理全部内容,希望文章能够帮你解决iphone – NSMutableArray内存管理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)