即使每个alloc都被释放,内存也会泄漏

me1*_*974 2 xcode memory-leaks ios

过去两天我花了很多时间来寻找内存泄漏.我已经阅读了文档并在互联网上搜索了很多信息(例如Owen Goss"在iOS应用程序中查找和修复内存泄漏"),但我仍然有太多的谜团需要解决.

例如,这段代码一次又一次地在仪器中亮起.我尽我所能,但无法解决它.

- (void) updateUserDefaults
{
    // alloc temporary Array for object´s positions
    NSMutableArray *tArray = [[NSMutableArray alloc] init];

    // store locations of objects
    for (int i=0; i<[originalOrigins count]; ++i) {
        CGPoint foo = [self.view viewWithTag:100+i].center;
        NSString *moo = NSStringFromCGPoint(foo);
        [tArray addObject:moo];
        [moo release]; //?
    }

    // retrieve all stored positions for all objects
    NSMutableArray *zettelPannedOrigins = [[[[NSUserDefaults standardUserDefaults] objectForKey:@"zettelPannedOrigins"] mutableCopy] retain];

    // replace with objects from this level
    [zettelPannedOrigins replaceObjectAtIndex:zettelAtIndexInTonebank withObject:tArray];

    // save
    [[NSUserDefaults standardUserDefaults] setObject:zettelPannedOrigins forKey:@"zettelPannedOrigins"];
    [[NSUserDefaults standardUserDefaults] synchronize];

    // clean up memory
    [tArray release];
    [zettelPannedOrigins release]; //?

}
Run Code Online (Sandbox Code Playgroud)

我认为对其他人来说也许有趣的是,我发布了我分配的内容.但它仍然在泄漏.我无法回答文档.或者我可以吗?

Jim*_*Jim 9

NSMutableArray *zettelPannedOrigins = [[[[NSUserDefaults standardUserDefaults] objectForKey:@"zettelPannedOrigins"] mutableCopy] retain];
Run Code Online (Sandbox Code Playgroud)

保留计数为2,mutableCopy保留一次,retain然后再次调用它.不要retain在这里打电话.

记住,如果你调用一个方法new,alloc,retaincopy在名称,你再拥有该对象,并保留计数上升.

  • 如果你正在推动额外的保留到你的应用程序,使其不崩溃而不理解为什么,你没有修复崩溃,你只是将它移动到以后...每个崩溃都有一个确切的原因. (3认同)