【问题标题】:release outside created autoreleased object inside a autoreleasepool {} [closed]在自动释放池 {} 内释放创建的自动释放对象 [关闭]
【发布时间】:2013-05-07 22:28:03
【问题描述】:

如何强制自动释放池释放我在自动释放池之外创建的自动释放对象{}

我正在使用的代码

- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection {

    NSError *error = nil;
    id response = [NSJSONSerialization JSONObjectWithData:responseData options:nil error:&error];
    [responseData release];
    if (error) {
            NSLog(@"ERROR JSON PARSING : %@", error.localizedDescription);
    }

    [delegate databaseUpdates:response connection:self];
}

- (void)databaseUpdates:(id)_updates connection:(URLConnection *)_urlConnection {
    if (_updates) {

        NSDictionary *updates = nil;
        @autoreleasepool {

            updates = [[_updates valueForKey:@"objects"] retain];

            //Release _updates here!?!
        }
    }
}

非常感谢

【问题讨论】:

    标签: objective-c autorelease nsautoreleasepool nsjsonserialization


    【解决方案1】:

    只需在自动释放池范围内调用autorelease,就会自动将对象添加到池中。不过,看起来您正在尝试在这里解决错误的问题。如果你的意思是_updates,那么这不应该是方法的内存管理,而是调用者的内存管理(它已经是!JSONObjectWithData:options:error: 已经返回一个自动释放的实例),如果你的意思是updates,那么,简单不要保留它。

    【讨论】:

    • 谢谢,我会尝试在我的 autoreleasepool {} 中调用 autorelease on _updates。
    • @user1839842:不,JustSid 是你不应该releaseautorelease _updates。你不会发布你没有保留在那个范围内的东西。
    • 我找到了另一种方法来减少我的内存警告问题。我删除了 databaseUpdates: 方法中的自动释放池。 _updates 对象将在 databaseUpdates: 方法结束时被删除。感谢您的帮助!
    【解决方案2】:

    这是不可能的。我想你需要这个

    - (void)connectionDidFinishLoading:(NSURLConnection *)theConnection {
        @autoreleasepool {
            NSError *error = nil;
            id response = [NSJSONSerialization JSONObjectWithData:responseData options:nil error:&error];
            [responseData release];
            if (error) {
                    NSLog(@"ERROR JSON PARSING : %@", error.localizedDescription);
            }
    
            [delegate databaseUpdates:response connection:self];
        } // response will be released here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 2011-11-09
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 2011-05-03
      相关资源
      最近更新 更多