2011-09-07 82 views
0

我在jsonParser上有內存泄漏。另一個iPhone內存泄漏問題

這裏是我的代碼

- (id) objectWithUrl:(NSURL *)url { 
SBJsonParser *jsonParser = [SBJsonParser new]; 
NSString *jsonString = [self stringWithUrl:url]; 

// Parse the JSON into an Object 
return [jsonParser objectWithString:jsonString error:nil]; } 

這是錯誤消息我得到,上線192分配的對象的潛在泄漏並存儲到「jsonParser」

請幫助。

回答

4

+ new相當於[[SBJsonParser alloc] init]調用,因此您有責任釋放jsonParser對象。當你在return語句中使用它時,修復泄漏的最簡單方法是在創建後自動釋放它:

SBJsonParser *jsonParser = [[SBJsonParser new] autorelease]; 
+0

另外,你應該考慮發送'alloc'和'init'消息給類而不是'new' ,雖然這些在功能上是等價的,但從技術上來說'new'不是Objective-C的一部分,也不是社區廣泛使用的。 [這裏有更多的原因使用'alloc'和'init'而不是'new'。](http://macresearch.org/difference-between-alloc-init-and-new) –

+0

謝謝你們,解決了這個問題。 – HardCode

+3

@粗鄙:從技術上講,'alloc'和'init'不是Objective-C的一部分。他們是基金會框架的一部分。實際上'new'早於他們,實際上是從Smalltalk中派生出來的。無論如何,你的觀點站立。每個人都使用'alloc''init'。在Objective-C中,'new'看起來有點奇怪。 – JeremyP