2011-12-07 57 views
2

自從一個月前獲得MBP以來,我一直在學習Obj-C。我對自己學習的東西很滿意&事情正在向我生鏽的舊大腦插入相當好。除了有一件事我只是不確定我是否忽略了,或者只是忽略了我的頭腦,或者我正在尋找一些不存在的東西。Objective-C中簡單的內聯函數調用等效 - 如何?

我使用的大多數語言都有一種插入函數調用來簡化編碼的方法,我只是不確定這是如何在Obj-C中轉換的。尤其是我指的是被調用的函數是在一個單獨的文件中,用於保持類似函數在一起的編碼。

到目前爲止,我在的OBJ-C看到的唯一途徑引導&教程是創建方法&然後實例化類(您正在使用的類中)來訪問的方法,在[message]類。這是在Obj-C中完成的方式嗎?唯一的辦法?出於某種原因最好的方式?我知道類在很多語言中都有自己的位置&我自己使用它們,但我指的是簡單的內聯函數調用,我通常不會去創建完整的類。

要使用我的點的一個簡單的C++控制檯示例(僅示出了cpp文件):

// example mainFile.cpp 
#include <iostream> 
#include "mainFile.h" 
#include "functionsFile.h" 
using namespace std; 

void theMainFunction() { 
    int resultBeforeAltering = 100; 
    // alterTheResult() = simple inline function call I'm referring to 
    cout << "The result is " << alterTheResult(resultBeforeAltering); 
} 

// example functionsFile.cpp - could contain many similar functions 
#include "functionsFile.h" 

int alterTheResult (int resultToAlter) { 
    int alteredResult; 
    if (resultToAlter < 100) { 
     alteredResult = resultToAlter * 2; 
    } else { 
     alteredResult = resultToAlter * 3; 
    } 
    return (alteredResult); 
} 

是否有一個等同法中的OBJ-C做alterTheResult()(假設mainFunction()是一個OBJ-C法)?

我見過在Obj-C中的函數的引用,但它們似乎是被引用的C函數。 C函數不是我在這裏問的。

在此先感謝,非常感謝的答覆。

回答

2

是的,內聯的方式是使用C或C++內聯 - 這是完全合法的(對於C++,需要編譯爲ObjC++)。一個ObjC方法永遠不會被內聯(直到LLVM產生一個JIT編譯器= p)。

如果你只是想組織在另一個文件的方法,你可能想嘗試的ObjC類:

// NSString_MONStuff.h 
@interface NSString (MONStuff) 
- (BOOL)mon_isPalindrome; 
@end 

// NSString_MONStuff.m  
@implementation NSString (MONStuff) 
- (BOOL)mon_isPalindrome { return ...; } 
@end 

同樣,那些不會被內聯。

您也可以使用C或C++外部函數或類來代替組織類別 - 好處是速度,大小,減少的依賴性和安全性。選擇是你的,但沒有辦法內聯一個objc方法(這是一個非常動態的語言)。

+0

謝謝賈斯汀,這不僅僅是我尋求的答案,所以現在不只是把它放在我的腦海裏,它給了我一些其他的細節來研究和考慮。非常感激。 – DaveLock

+0

@DaveLock不客氣,歡迎來到Xcode社區! – justin