在Objective-C中简单的内联函数调用等效 - 如何?

时间:2011-12-07 10:43:40

标签: objective-c

自从一个月前获得MBP以来,我一直在学习Obj-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函数不是我在这里要求的。

先谢谢,答案非常赞赏。

1 个答案:

答案 0 :(得分: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方法(这是一个非常动态的语言)。