Objective-C不帶加減號(hào)的方法實(shí)例
前言
在Oc中,方法分為類方法和實(shí)例方法。
前置加號(hào)(+)的方法為類方法,這類方法是可以直接用類名來調(diào)用的,它的作用主要是創(chuàng)建一個(gè)實(shí)例。有人把它稱為創(chuàng)建實(shí)例的工廠方法。
前置減號(hào)(-)的方法為實(shí)例方法,必須使用類的實(shí)例才可以調(diào)用的。
但看別人代碼過程中,還會(huì)發(fā)現(xiàn)一種,不帶加減號(hào)的方法。
@implementation MyViewController
void foo(){
printf("msg from foo...");
}
- (void)loadView {
[super loadView];
foo();
}
@end
這種是混搭的 C 代碼。
當(dāng)然當(dāng) C 方法寫在 @implementation 內(nèi)也是可以的,編譯器會(huì)正確地處理。因?yàn)?C 方法嚴(yán)格來說不隸屬于類,好的做法是始終寫在類實(shí)現(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)實(shí)的。
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 的對(duì)象傳遞給 C 代碼,這樣在 C 中便有了一個(gè)對(duì)象的引用,數(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
相關(guān)資源
Mixing C functions in an Objective-C class
accessing objective c variable from c function
總結(jié)
到此這篇關(guān)于Objective-C不帶加減號(hào)方法的文章就介紹到這了,更多相關(guān)Objective-C不帶加減號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ 中類對(duì)象類型的轉(zhuǎn)化的實(shí)例詳解
這篇文章主要介紹了C++ 中類對(duì)象類型的轉(zhuǎn)化的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08
c++中拷貝構(gòu)造函數(shù)的參數(shù)類型必須是引用
如果拷貝構(gòu)造函數(shù)中的參數(shù)不是一個(gè)引用,即形如CClass(const CClass c_class),那么就相當(dāng)于采用了傳值的方式(pass-by-value),而傳值的方式會(huì)調(diào)用該類的拷貝構(gòu)造函數(shù),從而造成無(wú)窮遞歸地調(diào)用拷貝構(gòu)造函數(shù)。因此拷貝構(gòu)造函數(shù)的參數(shù)必須是一個(gè)引用2013-07-07
VC List Control控件如何刪除選中的記錄實(shí)例詳解
這篇文章主要介紹了VC List Control控件如何刪除選中的記錄實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06
C++實(shí)現(xiàn)LeetCode165.版本比較)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode165.版本比較),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
用C++類實(shí)現(xiàn)單向鏈表的增刪查和反轉(zhuǎn)操作方法
下面小編就為大家?guī)硪黄肅++類實(shí)現(xiàn)單向鏈表的增刪查和反轉(zhuǎn)操作方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
Qt實(shí)現(xiàn)界面滑動(dòng)切換效果的思路詳解
這篇文章主要介紹了Qt實(shí)現(xiàn)界面滑動(dòng)切換效果,主要包括設(shè)計(jì)思路及主要函數(shù)講解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07

