Objective-C不帶加減號的方法實例
前言
在Oc中,方法分為類方法和實例方法。
前置加號(+)的方法為類方法,這類方法是可以直接用類名來調(diào)用的,它的作用主要是創(chuàng)建一個實例。有人把它稱為創(chuàng)建實例的工廠方法。
前置減號(-)的方法為實例方法,必須使用類的實例才可以調(diào)用的。
但看別人代碼過程中,還會發(fā)現(xiàn)一種,不帶加減號的方法。
@implementation MyViewController
void foo(){
printf("msg from foo...");
}
- (void)loadView {
[super loadView];
foo();
}
@end
這種是混搭的 C 代碼。
當然當 C 方法寫在 @implementation 內(nèi)也是可以的,編譯器會正確地處理。因為 C 方法嚴格來說不隸屬于類,好的做法是始終寫在類實現(xiàn)的外部。
void foo(){
printf("msg from foo...");
}
@implementation MyViewController
- (void)loadView {
[super loadView];
foo();
}
@end
C 中獲取 Objective-C 的數(shù)據(jù)
但如果你以為將 C 代碼寫在 @implementation 內(nèi)部就可以獲取到類里面的數(shù)據(jù),那是不現(xiàn)實的。
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 中便有了一個對象的引用,數(shù)據(jù)就可以正常獲取了。
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
總結(jié)
到此這篇關于Objective-C不帶加減號方法的文章就介紹到這了,更多相關Objective-C不帶加減號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳談C++何時需要定義賦值/復制構(gòu)造函數(shù)
下面小編就為大家?guī)硪黄斦凜++何時需要定義賦值/復制構(gòu)造函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
Windows配置VSCode+CMake+Ninja+Boost.Test的C++開發(fā)環(huán)境(教程詳解)
這篇文章主要介紹了Windows配置VSCode+CMake+Ninja+Boost.Test的C++開發(fā)環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
C語言詳解結(jié)構(gòu)體的內(nèi)存對齊與大小計算
C 數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲不同類型的數(shù)據(jù)項,本篇讓我們來了解C 的結(jié)構(gòu)體內(nèi)存對齊與計算大小2022-04-04

