2009-08-06 114 views
1

我得到一个仪器内存泄漏与此iPhone 3.0 SDK代码。iPhone内存泄漏JSON库

我使用JSON从http://code.google.com/p/json-framework/

这里是我的代码:

// .h 
@property (nontatomic,retain) NSMutableArray *tweets; 


// .m 
import" JSON.h" 
@synthesize tweets; 
... 
    tweets = [[NSMutableArray alloc] init]; 

    NSURL *url = [NSURL URLWithString:@"http://www.someurl.com"]; 
    NSString *jsonString = [NSString stringWithContentsOfURL:url]; 
    NSArray *results = [jsonString JSONValue]; 
    NSArray *data = [results valueForKey:@"stories"]; 

    for(NSDictionary *tweet in data) { 
     TweetmemeData *tweetmeme = [[TweetmemeData alloc] initWithTweet:tweet]; 
     [tweets addObject:tweetmeme]; 
     [self debugDump:tweetmeme]; 
     [tweetmeme release]; 
    } 
    [results release]; 

    return tweets; 

如果可能的话,请详细介绍一下这种形式的内存管理。我非常熟悉保留/释放,但显然在实施时遇到问题:)

谢谢!

+0

请注意,我不会发布NSArray *数据...如果我有锁定的话。此外,如果我保留结果似乎有帮助...预先感谢 – 2009-08-06 14:27:30

+0

根据约定,由于[jsonString JSONValue]不包含单词“alloc”,“新”或“复制”,它可能会返回一个自动释放指针,这意味着你不应该释放“结果”数组。 “数据”NSArray也是如此。 – 2009-08-06 14:45:25

+0

似乎'tweets'可能应该是autoreleased - 你是alloc/initing它,然后在方法结束时返回它。 另外,如果'tweets'是一个属性,那么您可能想要使用self.tweets而不是tweets,这样当它初始化时,它就会根据属性声明保留。 没有所有的代码,很难说,但从你显示的东西看来,事情似乎不平衡。 – Hunter 2009-12-30 16:54:29

回答

1

值得注意的是,在模拟器中出现的许多泄漏在硬件上完全不会发生。你正在使用模拟器还是在手机上测试它?

+0

嗨!谢谢(你的)信息。我正在使用模拟器..将检查设备。 请注意,我不释放NSArray *数据...如果我有锁定。此外,如果我保留结果似乎有帮助... 在此先感谢 – 2009-08-06 14:26:56

+0

你应该阅读内存管理,这是苹果的官方指南:http://developer.apple.com/iPhone/library/documentation/Cocoa/ Conceptual/MemoryMgmt/MemoryMgmt.html,这里是我发现的另一篇不错的文章:http://akosma.com/2009/01/28/10-iphone-memory-management-tips/ – Sneakyness 2010-03-16 16:30:33