欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Objective-C不帶加減號的方法實例

 更新時間:2021年06月01日 12:08:06   作者:劉哇勇  
顯而易見的事實是,Objective-C 中,+ 表示類方法,- 表示實例方法,這篇文章主要給大家介紹了關于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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++利用ImGUI繪制D3D外部菜單

    C++利用ImGUI繪制D3D外部菜單

    ImGUI 它是與平臺無關的C++輕量級跨平臺圖形界面庫,沒有任何第三方依賴,可以將ImGUI的源碼直接加到項目中使用。本文將利用ImGUI繪制D3D外部菜單,需要的可以參考一下
    2022-09-09
  • C++ 中類對象類型的轉化的實例詳解

    C++ 中類對象類型的轉化的實例詳解

    這篇文章主要介紹了C++ 中類對象類型的轉化的實例詳解的相關資料,這里提供實例幫助大家學習理解這部分內容,需要的朋友可以參考下
    2017-08-08
  • 內部排序之堆排序的實現詳解

    內部排序之堆排序的實現詳解

    本篇文章是對堆排序的實現進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • c++中拷貝構造函數的參數類型必須是引用

    c++中拷貝構造函數的參數類型必須是引用

    如果拷貝構造函數中的參數不是一個引用,即形如CClass(const CClass c_class),那么就相當于采用了傳值的方式(pass-by-value),而傳值的方式會調用該類的拷貝構造函數,從而造成無窮遞歸地調用拷貝構造函數。因此拷貝構造函數的參數必須是一個引用
    2013-07-07
  • VC List Control控件如何刪除選中的記錄實例詳解

    VC List Control控件如何刪除選中的記錄實例詳解

    這篇文章主要介紹了VC List Control控件如何刪除選中的記錄實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • C++實現LeetCode165.版本比較)

    C++實現LeetCode165.版本比較)

    這篇文章主要介紹了C++實現LeetCode165.版本比較),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • 用C++類實現單向鏈表的增刪查和反轉操作方法

    用C++類實現單向鏈表的增刪查和反轉操作方法

    下面小編就為大家?guī)硪黄肅++類實現單向鏈表的增刪查和反轉操作方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • C++的缺省參數你了解嘛

    C++的缺省參數你了解嘛

    這篇文章主要為大家介紹了C++缺省參數,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Qt實現界面滑動切換效果的思路詳解

    Qt實現界面滑動切換效果的思路詳解

    這篇文章主要介紹了Qt實現界面滑動切換效果,主要包括設計思路及主要函數講解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C語言常用占位符的使用小結

    C語言常用占位符的使用小結

    占位符是一種用于格式化輸出的特殊字符,通常用于 printf() 等輸出函數中,本文主要介紹了C語言常用占位符的使用小結,非常具有實用價值,需要的朋友可以參考下
    2023-05-05

最新評論