以前也有類似的問題,但是我無法解決我目前遇到的任何問題。保留iOS塊的問題
現狀:
CustomType *Object;
BOOL (^doAverage)(CustomType *, int, int) = ^(CustomType *Trigger, int Total, int Pulse) {
//Calculate Average from Total and Pulse
Total /= Pulse;
[Trigger setValue:Total];
};
Object = [CustomType CreateObject]; //Autoreleased Object
[Object addCallback:^{ return doAverage(Object, 56, 32); }];
[Array addObject:Object]; //Adds to collection.
問題在手,你可能已經想通保留週期。
Object
保留對addCallback
中的塊的引用,並且塊doAverage
保留對Object
的引用。
使用實例變量是不可能的,因爲我想爲多個對象重用變量Object
。 (臨時變量)。
使用本地變量會導致保留計數。
並且使用__block CustomType *Object
也不起作用,因爲無論出於何種原因,Trigger
都會在實際調用回調後變爲零。
任何想法?
我有一個臨時解決方案,但它似乎相當...哈克。
剛指出它,總是使對象小寫,並且你在第一行中缺少一個指針。 – NSAddict
@NSAddict感謝您的指針,我解決了這個問題。關於小寫......爲什麼?你看,我已經用C++「長大」了,因此贊成CamelCase符號。 (帶大寫字母的大寫字母) – ATaylor
這是大多數編程語言的標準。類>從大寫字母開始,變量>從小寫字母開始,它更具可讀性,因爲您可以調用類和對象的方法。 – NSAddict