返回对象后释放对象时,我遇到内存泄漏警告问题。我读过一些关于类似主题的帖子,但在这些帖子中,发布的问题在于,最终“他们”并没有真正拥有他们要发布的对象。
如果我在初始化同一对象时使用自动释放,我不会遇到任何问题。我的问题是:如果 Apple 建议手动释放我们创建的所有对象,我为什么会收到此警告?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
//Display no cells until it loads
if([items count] < numberOfItemsToDisplay){
UITableViewCell *cell = [[[UITableViewCell alloc] init]autorelease];
return cell;
//[cell release];
}
我在自动释放对象方面没有问题,但我讨厌不理解我认为我理解的东西:)
谢谢,L
最佳答案
Apple 不会说“手动释放您创建的所有对象”——他们只是说“最终释放您创建的所有对象”。这可以通过手动释放或自动释放来完成。
自动释放基本上只是在稍后的某个时刻发生的手动释放(在调用 [NSAutoreleasePool rain]
或 [NSAutoreleasePool release]
时)。
如果你希望你的方法之一返回一个由调用者拥有的对象,你必须使用 autorelease,因为如果你在“返回”之前调用release,并且保留计数会变为零(通常情况下,如果你刚刚创建了该对象),那么该对象将立即被释放,然后不可用。该方法的调用者发现自己有一个指向某个垃圾非对象的指针。
关于iphone - 释放时会发出内存泄漏警告,但自动释放时不会发出内存泄漏警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5217639/