ios - 内存管理何时使用release

标签 ios memory-management

我有另一个关于 iOS 3.0+ 中内存管理的问题,我知道如果我们这样做 [varialbe release] 会释放它对对象的保留,但是像这样的代码 -

- (void) getPostsFromJson:(NSData *)data
{
    NSError *theError = nil;

    NSDictionary *dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:data error:&theError];

    if (dict == nil) {

        [SystemStatusValues getInstance].isValidJson = NO;
        [SystemStatusValues getInstance].httpStatus = HTTP_STATUS_FAILED;

        NSLog(@"getPostsFromJson - %@ %@",
              [theError localizedDescription],
              [[theError userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
    } else {

        NSArray *keys = [dict allKeys];        
        keys = [keys sortedArrayUsingFunction:keySortByInteger context:nil];

        self.keys = keys;
        self.posts = dict;
        NSLog(@"Posts : getPostsFromJson = %@", self.posts);

        if ([keys count] < TOTAL_SECTIONS) {

            [SystemStatusValues getInstance].isValidJson = NO;

        } else {

            [SystemStatusValues getInstance].isValidJson = YES;
            if (self.nextPosts == nil) {

            }

        }

        // [keys release];
        // [dict release];
        return;
    }
}

你可以看到有两个局部变量 - keys 和 dict,我需要在代码末尾调用 [keys release] 或 [dict release] 吗?事实上我做到了,但它有时会带来崩溃。那么对于局部变量,我们是不是用完就不需要释放了呢?

最佳答案

字典和键都是对自动释放对象的引用。你不应该释放它们,这会导致你的程序终止。 您不拥有通过引用返回的对象,并且您不得放弃您不拥有的对象的所有权

那么对于局部变量,我们不需要在使用后释放它吗?如果您拥有这些对象,则必须在不再需要它们时释放它们,不管它是否是局部变量变量或ivar。

阅读此 - Advanced Memory Management Programming guide

关于ios - 内存管理何时使用release,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757305/

相关文章:

ios - 在swift中设置模糊效果全屏

iOS UI 测试以调整 SwiftUI 应用程序上的选择器值

iphone - 如何通过填写 NSDictionary 以 JSON 格式发送 UIImage

linux - 什么是linux中的内存回收

ios - UIWebView 显示 URL 而不是网页

ios - 当我尝试使用它的响应时,异步 http 调用还没有准备好

c++ - 为什么缓冲区应该在 64 字节边界上对齐以获得最佳性能?

c - 变量在内存中的位置,C

c - C中的字符串链表

c - CPU 是否自动为内存分配一个值?