Re: [問題] 呼叫 objC 物件或方法 from C function

看板MacDev作者 (龍野南雲)時間11年前 (2012/10/06 02:30), 編輯推噓1(1010)
留言11則, 4人參與, 最新討論串2/2 (看更多)
其實你應該做的是像這樣: @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

10/06 10:47, , 1F
恩 感謝你的建議 因為我做的是 聲音訊號的部分
10/06 10:47, 1F

10/06 10:48, , 2F
而我的C_function 能幫我偵測聲音並且結束 所以 才想
10/06 10:48, 2F

10/06 10:49, , 3F
要利用顯示label的功能 提醒使用者知道已經偵測結束
10/06 10:49, 3F

10/06 10:50, , 4F
Thread 也是種辦法 不過還是想說有沒有其他可能的作法
10/06 10:50, 4F

10/06 10:51, , 5F
而那個 C_function 又是一個 callback function...
10/06 10:51, 5F

10/06 14:01, , 6F
通常都是high-level的語言呼叫low-level的語言
10/06 14:01, 6F

10/06 14:01, , 7F
我也很難理解這種逆天的作法... XD
10/06 14:01, 7F

10/07 11:22, , 8F
那我會建議把你的C function做些架構調整,不然這樣很難
10/07 11:22, 8F

10/07 11:22, , 9F
利用啊...
10/07 11:22, 9F

10/08 00:40, , 10F
file type可以指定c source 我用過.mm可以兼容c++
10/08 00:40, 10F

10/08 00:41, , 11F
建議c還是打包成library比較好
10/08 00:41, 11F
文章代碼(AID): #1GRoSuTc (MacDev)
文章代碼(AID): #1GRoSuTc (MacDev)