作者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
1F:推 r0931265515:恩 感谢你的建议 因为我做的是 声音讯号的部分 10/06 10:47
2F:→ r0931265515:而我的C_function 能帮我侦测声音并且结束 所以 才想 10/06 10:48
3F:→ r0931265515:要利用显示label的功能 提醒使用者知道已经侦测结束 10/06 10:49
4F:→ r0931265515:Thread 也是种办法 不过还是想说有没有其他可能的作法 10/06 10:50
5F:→ r0931265515:而那个 C_function 又是一个 callback function... 10/06 10:51
6F:→ leondemon:通常都是high-level的语言呼叫low-level的语言 10/06 14:01
7F:→ leondemon:我也很难理解这种逆天的作法... XD 10/06 14:01
8F:→ Blueshiva:那我会建议把你的C function做些架构调整,不然这样很难 10/07 11:22
9F:→ Blueshiva:利用啊... 10/07 11:22
10F:→ nobody1:file type可以指定c source 我用过.mm可以兼容c++ 10/08 00:40
11F:→ nobody1:建议c还是打包成library比较好 10/08 00:41