Objective c 构造带块参数的NSInvocation
我正试图将一个块作为参数发送给一个NSInvocation调用的方法(对于上下文,它是由NSInvocationOperation触发的)。调用应该保留参数,它似乎对“常规”对象参数有效,但块的重新计数保持在1 我可以在方法调用中使用它之后释放它,但是如果在调用操作之前解散队列,理论上可能会泄漏它 一些代码:Objective c 构造带块参数的NSInvocation,objective-c,ios,memory-management,objective-c-blocks,nsinvocation,Objective C,Ios,Memory Management,Objective C Blocks,Nsinvocation,我正试图将一个块作为参数发送给一个NSInvocation调用的方法(对于上下文,它是由NSInvocationOperation触发的)。调用应该保留参数,它似乎对“常规”对象参数有效,但块的重新计数保持在1 我可以在方法调用中使用它之后释放它,但是如果在调用操作之前解散队列,理论上可能会泄漏它 一些代码: NSInvocationOperation *load = [[NSInvocationOperation alloc] initWithInvocation:loadInvoc]; NS
NSInvocationOperation *load = [[NSInvocationOperation alloc] initWithInvocation:loadInvoc];
NSAssert([loadInvoc argumentsRetained],@"Arguments have not been retained");
[loader release];
NSInvocation *completionInvoc = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:@selector(serviceCompletionBlock:afterInvocationCompleted:)]];
[completionInvoc setTarget:self];
[completionInvoc setSelector:@selector(serviceCompletionBlock:afterInvocationCompleted:)];
MFEImageCallback callback = [completionBlock copy];
[completionInvoc setArgument:&callback atIndex:2];
[completionInvoc setArgument:&load atIndex:3];
NSInvocationOperation *completion = [[NSInvocationOperation alloc] initWithInvocation:completionInvoc];
NSAssert([completionInvoc argumentsRetained],@"Completion handler not retaining");
[callback release];
[completion addDependency:load];
我正在使用的块(在NSManagedObject
子类的访问器方法中定义):
不要调用'retainCount';这是无用的。
如果看不到你的区块的内容,就不可能说。如果您的块实际上是一个静态块,那么复制它不会起任何作用
你看到崩溃了吗?如果我没有复制块,我会看到崩溃(可能是因为它被分配到堆栈上,并且在调用之前被清除了)。然而,事实证明,如果我释放
回调
块,它不会崩溃。也没有泄漏报告说,块泄漏或其他任何事情。看起来我只是想得太多了。在问题中添加了我的块定义。还有,谢谢你的帮助!您从哪里获得completionBlock?您是否使用getArgument:atIndex:获取它?
^(UIImage *image,NSError *err){
[self setValue:image forKey:key];
}