我还有一个关于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;
    }
}


您可以看到有两个局部变量-key和dict,我是否需要在代码末尾调用[keys release]或[dict release]?其实我做到了,但有时会带来挫败感。因此,对于局部变量,我们不需要在使用后将其释放?

最佳答案

dict和key都是对自动释放对象的引用。您不应该释放它们,这将导致程序终止。 You Don’t Own Objects Returned by Reference and You must not relinquish ownership of an object you do not own

因此,对于局部变量,我们不需要在使用后将其释放?如果您拥有这些对象,则必须在不再需要它们时释放它们,无论它的局部变量还是ivar都没有关系。

阅读此内容-Advanced Memory Management Programming guide

10-06 08:54