2014-02-11 69 views
1

我遇到了難以重現的奇怪崩潰。例如,在過去的35次應用程序中,這次崩潰發生過一次。不幸的是,我不清楚確切的步驟。SIGSEGV將塊設置爲零時

碰撞報告顯示:

SIGSEGV 
Remotely-[NetworkCall handleRequestFinished] 
in NetworkCall.m on Line 232 

線232是:

_startBlock = nil; 

和屬性被定義爲:

typedef void (^NetworkCallStartBlock)(); 
@property(copy, nonatomic) NetworkCallStartBlock startBlock; 

的一個時間我能夠REPRO的缺少w /附加的調試器,將_startBlock打印到控制檯顯示其值在試圖分配nil時已爲零。

有什麼想法?

+0

這意味着你設置塊而不復制它(很可能通過變量或在沒有手動副本的設置中),並且當它設置爲零時,試圖釋放過去是在堆棧上的塊。別客氣。 –

+0

該屬性被定義爲複製雖然,所以不應該已經複製它? –

+0

如果你有一個自定義setter,沒有。你必須複製二傳手(爲什麼你會使用monatomic?)。 –

回答

0

JosephH上面的評論是正確的。把自己的價值設定爲零是在自我釋放之後發生的,所以這是解決自我問題的方法。這個班級的dealloc沒有正確設置爲零,因此解決了這個問題。感謝所有的輸入和跟蹤它

0

_startBlock = nil;更改爲self.startBlock = nil 後一個使您的塊釋放並安全地將屬性設置爲零。