作者Blueshiva (龍野南雲)
看板MacDev
標題Re: [問題] 呼叫 objC 物件或方法 from C function
時間Sat Oct 6 02:30:13 2012
其實你應該做的是像這樣:
@interface foo:NSObject
- (IBAction)doJob:(id)sender;
@end
@implementation foo
- (IBAction)doJob:(id)sender
{
label.text = @"Start";
call_your_c_function();
label.text = @"Finished";
}
不要老是想逆天從C去呼叫操作ObjC的東西...
不過這做法就不管如果使用者中途想暫停的話怎麼辦啦...要的話就要另外開thread
或者用GCD處理,而且相對的你的C function那邊也要檢查狀態就是。
※ 引述《r0931265515 (蛙哥)》之銘言:
: 小弟徹夜了解 objC 之後(繼承、封裝、多型等基本觀念),還是對於我現在做的
: program 有點問題。
: 顧名思義在我的一個 C function 裡,我成功的呼叫了以下的 ObjC_function
: (大概的架構是這樣)
: @interface A : NSObject
: .
: .
: .
: .
: -(void) ObjC_function()
: void C_fucntion()
: @end
: 但是我還需要做的是,我想要呼叫按鈕之間能做的事(例如我的按鈕會顯示"結束")
: @interface B : UIViewController
: .
: .
: .
: IBOutlet UIButton *finishBtn;
: IBOutlet UILabel *status;
: -(IBAction) finish:(id)sender;
: @end
: 原本 finishBtn 是要手動按下,才會執行裡面的工作(最主要的是改變Label的文字)
: ,現在想要直接自動地去做 finish() 裡能 work 的事情,而我的關鍵function就是
: 那個 C_function 。
: 不知道是否有大大能幫我解惑,感激不盡!
: 謝謝!
--
Luna quieres ser madre
y no encuentras querer
que te haga mujer
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.104.95.143
推 r0931265515:恩 感謝你的建議 因為我做的是 聲音訊號的部分 10/06 10:47
→ r0931265515:而我的C_function 能幫我偵測聲音並且結束 所以 才想 10/06 10:48
→ r0931265515:要利用顯示label的功能 提醒使用者知道已經偵測結束 10/06 10:49
→ r0931265515:Thread 也是種辦法 不過還是想說有沒有其他可能的作法 10/06 10:50
→ r0931265515:而那個 C_function 又是一個 callback function... 10/06 10:51
→ leondemon:通常都是high-level的語言呼叫low-level的語言 10/06 14:01
→ leondemon:我也很難理解這種逆天的作法... XD 10/06 14:01
→ Blueshiva:那我會建議把你的C function做些架構調整,不然這樣很難 10/07 11:22
→ Blueshiva:利用啊... 10/07 11:22
→ nobody1:file type可以指定c source 我用過.mm可以兼容c++ 10/08 00:40
→ nobody1:建議c還是打包成library比較好 10/08 00:41