如何在Objective-C中创建全局函数

时间:2011-09-03 16:00:56

标签: iphone objective-c

我正在开发一款iphone应用程序,我需要在我的课程中使用全局功能。

但我怎么能这样做?

我刚尝试创建functions.h喜欢这个

#include <Foundation/Foundation.h>

- (void)printTest;

functions.m

#import "functions.h"

- (void)prinTest {
    NSLog(@"test");
}

但它不起作用。我说:“方法定义不在@implementation上下文中。”

5 个答案:

答案 0 :(得分:57)

这里有两个选择。首先是在静态类中创建一个类方法:

部首:

#import <Foundation/Foundation.h>

@interface GlobalStuff : NSObject {}

+ (void)printTest;

@end

实现:

#import "functions.h"

@implementation GlobalStuff

+ (void) printTest {
  NSLog(@"test");
}

使用以下方式致电:

#import "functions.h"

...
[GlobalStuff printTest];

另一种选择是声明一个全局函数而不是类:

部首:

void GSPrintTest();

实现:

#import <Foundation/Foundation.h>
#import "functions.h"
void GSPrintTest() {
  NSLog(@"test");
}

使用以下方式致电:

#import "functions.h"
...
GSPrintTest();

第三个(糟糕但可能)选项是为您的方法添加NSObject类别:

部首:

#import <Foundation/Foundation.h>

@interface NSObject(GlobalStuff)
- (void) printTest;
@end

实现:

#import "functions.h"

@implementation NSObject(GlobalStuff)
- (void) printTest {
  NSLog(@"test");
}
@end

使用以下方式致电:

#import "functions.h"
...
[self printTest];

答案 1 :(得分:10)

如果需要全局函数,只需编写C函数即可。 objective-C语法仅用于对象的上下文中。

void printTest() {
    NSLog(@"This is a test");
}

编辑:

您必须在functions.h中添加声明:

void printTest();

答案 2 :(得分:3)

简单。您的设置几乎是完美的。

只需#include您需要的所有课程中的Functions.h,您应该全部设定。我一直这样做。

你将不得不使用某种对象,但是你可以通过使用NSObject类别来使其“感觉”就像一个全局的Objective-c函数:

  • 创建一个新文件,然后选择 Objective C Category
  • 将其设为NSObject
  • 类别
  • 使用提供的模板来定义和实施您的方法。

现在只需调用

即可使用它们
[self myCategoryMethod:optionalParameter];

答案 3 :(得分:0)

尝试将functions.m重命名为functions.c

或者将此方法添加到某个班级SharedClass中,并将其拒绝为静态:+ (void)prinTest。然后您可以使用此代码访问它们

[SharedClass printTest];

答案 4 :(得分:0)

您的错误指的是您需要在界面中使用该方法。

@interface SomeClass
- (void)printTest;
@end

要在整个应用(包含您的Functions.h)中使用静态空白,请尝试以下操作:

void printTest ()
{
    /* do your print stuff */
}