iphone - 在 Objective-C 中使用 block 作为 TargetAction

标签 iphone objective-c memory-management objective-c-blocks

在这个答案中:Can I pass a block as a @selector with Objective-C?

Lemnar 说你可以这样做:

id block = [^{NSLog(@"Hello, world");} copy];// Don't forget to -release.

[button addTarget:block
           action:@selector(invoke)
 forControlEvents:UIControlEventTouchUpInside];

具体应该在哪里发布?我想在 viewDidLoad 方法中使用它的地方,所以 viewDidUnload 似乎是释放它的地方,但是有没有办法在不创建 ivar 的情况下释放它?

最佳答案

不支持; invoke 方法不是公开的,Blocks 不打算直接用于这样的角色。

提交增强请求,作为解决方法,使用 objc_implementationWithBlock() 和 (IIRC) class_addMethod() 创建一个 block 即方法,将在目标行动。

关于iphone - 在 Objective-C 中使用 block 作为 TargetAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7893804/

相关文章:

iOS 推送通知 - 角标(Badge)不会显示

iphone - 通过 USB 从 MAC 捕获 iPhone 屏幕,无需越狱

iPhone:CPU 处理 DSP/傅里叶变换/频域的能力?

iphone - 如何在点击后突出显示电子邮件地址

ios - 如果我重新创建推送通知证书,是否需要向 iOS 应用程序发送更新?

iOS UITableViewWrapperView 在带有 Xcode9 的 iOS 11 中不存在

ios - 内存警告 UIImagepickerController IOS 7

java - 为什么归并排序和快速排序操作的顺序会导致第二个操作运行得更快?

c++ - 成员对象的地址在构造函数之后立即发生变化

ios - iPhone 应用程序在 didFinishLaunchingWithOptions 之前崩溃