2010-08-07 60 views
2

我想從C函數調用一個Objective-C函數,但代碼在objc_msgSend中不斷崩潰。如何從C函數調用objective-C函數

我的Objective-C類是一個單例,我使用下面的代碼。

void c_function(int arg0, const char *arg1) 
{ 
    [[objc_class instance] testFunction:arg0 Arg1:arg1]; 
} 

當調用objective-C函數時,gdb顯示崩潰正在發生。如何從c函數中調用一個Objective-C函數?

感謝

+0

你的意思是objective-c「方法」嗎?我看不出你的代碼有什麼問題。你能提供更多細節嗎? – yehnan 2010-08-07 00:13:38

+0

@Gary,你知道怎麼從C調用你的Objective-C單例嗎? – user2924482 2016-09-09 23:42:23

回答

2

沒有什麼不對您的代碼有調用C函數objc方法並沒有硬性規定。如果objc_msgSend發生崩潰,請參閱http://www.sealiesoftware.com/blog/archive/2008/09/22/objc_explain_So_you_crashed_in_objc_msgSend.html。如果objc行在其他objc代碼中也會發生同樣的事情 - 很可能您忘記保留單例的共享實例。

+0

謝謝。事實證明這個問題是由於第三方庫的使用中存在內存損壞而發生的。 – Gary 2010-08-08 23:03:16

-1

[[objc_class instance] testFunction:arg0 Arg1:arg1];

由於你沒有提供進一步的信息:

objec_class是一個實例,你的單身?它處理消息實例? ...

objec_class真的是一類,具有類方法實例?這會給你另一個實例...

換句話說,你真的有這樣的事

@interface class2 { } -(void) testFunction:(int)count Arg1:(const char *)args; @end

@include "class2.h" @interface objc_class { } -(class2*) instance { } -(void) testFunction:(int)count Arg1:(const char *)args; @end

@include "class2.h" @interface objc_class { } +(class2*) instance; // be aware of the fact, instance (normaly) does not have // access to any instance variables!

要包括在內嗎?

你的代碼看起來不像「嘿,對象(實例)單例,我告訴你'實例'。然後我接受你的迴應並給它發送'testFunction:Arg1:'(帶有一些值)「的消息!

(你確定你瞭解目標C?)

問候

+0

你確定你理解我的問題嗎? :)我沒有問單獨模式實現,而是關於如何從C函數調用objective-C函數。 – Gary 2010-08-08 23:04:56

-1

1:

@interface class2 { 

} 

-(void) testFunction:(int)count Arg1:(const char *)args; 

@end 

2:

@include "class2.h" 

@interface objc_class { 

} 

-(class2*) instance; 

@end 

3:

@include "class2.h" 

@interface objc_class { 

} 

+(class2*) instance; // be aware of the fact, instance (normally) does not 
        // have access to any instance variables!