簡體   English   中英

在Objective-C中使用塊作為TargetAction

[英]Using a block as TargetAction in Objective-C

在這個答案中: 我可以使用Objective-C將塊作為@selector傳遞嗎?

Lemnar說你可以這樣做:

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

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

究竟應該在哪里發布? 在我想使用它的地方,是在viewDidLoad方法中,所以viewDidUnload似乎是釋放它的地方,但有沒有辦法在不創建ivar的情況下釋放它?

那是不支持的; invoke方法不是public,並且Blocks不打算直接在這樣的角色中使用。

提交增強請求,並使用objc_implementationWithBlock()和(IIRC) class_addMethod()創建一個可在目標操作中使用的塊方法。

有些東西必須擁有該塊對象的所有權才能堅持下去。 Objective-C中的所有權意味着具有對所擁有對象的引用和引用計數(“保留”)。 如果沒有引用它,您將無法釋放它 - 這意味着泄漏。 你需要一個指向對象的變量。 按鈕本身就是擁有目標的一個很好的候選者,但UIButton不會那樣工作。 我想你可以UIButton子類UIButton ; 否則,是的,你需要在你的一個控制器中創建一個ivar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM