2011-12-07 29 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