【发布时间】:2011-08-10 21:49:53
【问题描述】:
我的问题是我正在使用 NSSortDescriptor 对数组进行排序,但我有一些泄漏。 我是 Objective C 的新手,虽然我有 C++ 的背景,但是我不太了解保留、释放和自动释放。我的简化代码如下:
-(IBAction)sortByDate
{
NSSortDescriptor *Descriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:Descriptor];
NSArray *sortedArray =[productListe sortedArrayUsingDescriptors:sortDescriptors];
[productListe release];
productListe=nil;
productListe=[[NSMutableArray alloc]initWithArray:sortedArray];
[tableViewProduct reloadData];
NSLog(@"[Descriptor retainCount] =%i",[Descriptor retainCount]); //(return 2)
NSLog(@"[sortDescriptors retainCount] =%i",[sortDescriptors retainCount]); //(return 1)
NSLog(@"[sortedArray retainCount] =%i",[sortedArray retainCount]);//(return 1)
}
在 Instruments 我得到了这个泄漏列表:
NSSortDescriptor 0x80148a0 32 myProject -[myClass sortByDate]
__NSArrayI 0x80148c0 16 myProject -[myClass sortByDate]
__NSArrayReverseEnumerator 0x84079c0 16 UIKit -[UITableView reloadData]
__NSCFArray 0x8015f10 32 Foundation +[NSArray(NSArray) newWithContentsOf:immutable:]
Malloc 32 Bytes 0x800f330 32 Foundation +[NSArray(NSArray) newWithContentsOf:immutable:]
__NSArrayI 0xc914e90 352 Foundation -[NSArray(NSKeyValueSorting) sortedArrayUsingDescriptors:]
这是我的问题:
- 如果我的应用程序有漏洞,Apple 会拒绝它从 appstore 中删除吗?
- 如何在不崩溃的情况下释放所有对象。
- 为什么 reloadData 会泄漏。
- 如何在我的应用程序中跟踪泄漏,例如 Foundation 泄漏。
这是我的第一个应用程序,也是我在论坛上的第一个问题,因此感谢您的所有回答。
感谢您的回答,很高兴知道有人可以提供帮助。 我使用工具并在正确的位置释放所有东西(我认为;)),但是当我尝试对我的 tableview 进行排序时,应用程序崩溃(有 reloadData 和没有它)。 如果你能说出仪器中的百分比(%)是什么意思?
现在我的仪器没有泄漏(除了重新加载数据泄漏,但我认为你无法帮助我) 她是一张图片,如果我使用 cmd+shift+A,你可以看到我拥有的图片(对不起,我不知道她的名字):
我认为“sortDescriptors”是自动释放的,但如果我不在仪器中释放它,我有 50% 的泄漏????
想你。
【问题讨论】:
-
retainCounr 没用。不要叫它。
标签: iphone memory-leaks