以前也有人问过类似的问题,但我无法用这些答案中的任何一个来解决我当前的问题。
情况:
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
保留对 in块的引用addCallback
,并且块doAverage
保留对 的引用Object
。
使用实例变量是不可能的,因为我想Object
为多个对象重用该变量。(临时变量)。
使用局部变量会导致保留计数。
并且 using__block CustomType *Object
也不起作用,因为无论出于何种原因Trigger
,一旦实际调用回调,最终结果为 nil 。
有任何想法吗?
我有一个临时的解决方案,但它似乎相当...hacky。