iphone - 释放时会发出内存泄漏警告,但自动释放时不会发出内存泄漏警告

标签 iphone memory-leaks uitableview release autorelease

返回对象后释放对象时,我遇到内存泄漏警告问题。我读过一些关于类似主题的帖子,但在这些帖子中,发布的问题在于,最终“他们”并没有真正拥有他们要发布的对象。

如果我在初始化同一对象时使用自动释放,我不会遇到任何问题。我的问题是:如果 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/

相关文章:

ios - 我应该使用什么技术来组织这个日期列表?

iphone - 使用 Social Framework 时出现 Facebook 错误 ACErrorPermissionDenied(错误代码 7)

ios - 存储对象的潜在泄漏

uitableview - 如何从@IBAction 中调用 TableView 函数

objective-c - 如何用 ASIHttpRequest JSON 数据填充 UITableView?

ios - 如何将特定 NSMutableArray 中的数据重新加载到 UITableView 中

iphone - ipad 中的 SplitView 导航问题

ios - 应用程序未要求联系人权限以访问iOS 9中的联系人

java - 内存泄漏 : Garbage-Collection Root

ios - GLKit 内存泄漏 copywithZone