7

Xcode 4靜態分析器將此方法標記爲具有過度釋放的返回值,但似乎並非如此。Xcode靜態分析器和copyWithZone

- (id)copyWithZone:(NSZone *)zone 
{ 
    return [[[self class] allocWithZone:zone] initWithURL:self.url postString:self.postString]; 
} 

有從返回關鍵字來表達下列它指向的箭頭,另一個從該表達式到分析器警告。下面是靜態分析:

  1. 方法返回一個Objective-C對象與1擋計數
  2. 對象發送消息-autorelease
  3. 對象返回給呼叫者作爲擁有參考(單保留計數轉移到來電者)
  4. 對象返回了具有+0(非所有對來電者)保留計數+0
  5. 對象挽留計數恢復至呼叫者其中+1(擁有)保留計數預計

靜態分析器是不正確的還是這個代碼有問題?


通過請求,-initWithURL:postString:方法:

- (id)initWithURL:(NSURL *)u postString:(NSString *)p 
{ 
    if ((self = [super init])) 
    { 
     self.url = u; 
     self.postString = p; 
    } 
    return self; 
} 

我繼續即使在清潔和重建項目後得到這個警告。

更新: Xcode靜態分析器在升級到Xcode 4.2後不再將其標記爲問題。

+0

嗯......你還可以發佈你的initWithURL:postString:方法嗎? – spacehunt

+0

@spacehunt:我更新了問題。 – titaniumdecoy

+0

@Jason:我剛剛使用上面的方法創建了一個新類,我不能用Xcode 4.0.2複製它。當你點擊「2.對象發送自動釋放」分析時,哪個箭頭被突出顯示? – spacehunt

回答

3

這是Xcode中的一個錯誤。代碼是沒問題的。

+0

這似乎是這種情況,因爲Xcode 4.2不再將此代碼標記爲問題。 – titaniumdecoy