Objective-C不帶加減號的方法實例
前言
在Oc中,方法分為類方法和實例方法。
前置加號(+)的方法為類方法,這類方法是可以直接用類名來調用的,它的作用主要是創(chuàng)建一個實例。有人把它稱為創(chuàng)建實例的工廠方法。
前置減號(-)的方法為實例方法,必須使用類的實例才可以調用的。
但看別人代碼過程中,還會發(fā)現一種,不帶加減號的方法。
@implementation MyViewController void foo(){ printf("msg from foo..."); } - (void)loadView { [super loadView]; foo(); } @end
這種是混搭的 C 代碼。
當然當 C 方法寫在 @implementation 內也是可以的,編譯器會正確地處理。因為 C 方法嚴格來說不隸屬于類,好的做法是始終寫在類實現的外部。
void foo(){ printf("msg from foo..."); } @implementation MyViewController - (void)loadView { [super loadView]; foo(); } @end
C 中獲取 Objective-C 的數據
但如果你以為將 C 代碼寫在 @implementation 內部就可以獲取到類里面的數據,那是不現實的。
MyViewController.h
@interface MyViewController () @property NSString *someStr; @end
MyViewController.m
@implementation MyViewController // void foo() { printf(self.someStr); } // 🚨 Use of undeclared identifier '_someStr' void foo() { printf(_someStr); } // 🚨 Use of undeclared identifier '_someStr' - (void)loadView { [super loadView]; self.someStr = @"some string..."; foo(); } @end
正確的做法是將 Objective-C 的對象傳遞給 C 代碼,這樣在 C 中便有了一個對象的引用,數據就可以正常獲取了。
MyViewController.h
@interface MyViewController : UIViewController @property NSString *someStr; - (void)myObjcMethod; @end
MyViewController.m
void foo(MyViewController* obj) { printf("%s\n", [obj.someStr UTF8String]); [obj myObjcMethod]; } @implementation MyViewController - (void)loadView { [super loadView]; self.someStr = @"some string..."; foo(self); } - (void)myObjcMethod { NSLog(@"msg from my objc method"); } @end
相關資源
Mixing C functions in an Objective-C class
accessing objective c variable from c function
總結
到此這篇關于Objective-C不帶加減號方法的文章就介紹到這了,更多相關Objective-C不帶加減號內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
VC List Control控件如何刪除選中的記錄實例詳解
這篇文章主要介紹了VC List Control控件如何刪除選中的記錄實例詳解的相關資料,需要的朋友可以參考下2017-06-06