以前也有类似的问题,但是我无法解决我目前遇到的任何问题。保留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