2012-09-04 42 views
1

我一直在建立一个iOS应用和我的ViewControllers之一已成为全像:移动功能,以单独的类

CGPoint randomPoint() 
{ 
    //Code goes here 
} 

我现在想将其移动到A级(或协议,我不知道什么会为我工作),在VC导入并调用像以前一样:

p=randomPoint(); //NOT A.randomPoint(), [A randomPoint] or whatever 

我尝试使用C++类模板,但它与CGPoint,和的CGRect这么久的问题。

我该如何做到这一点?

+0

为什么不制作静态内联指令?他们在任何头文件'.h'文件中都足够快乐。 – holex

回答

3

如果您想知道如何将C函数描述为您正在描述的函数,那么最佳做法是将它们移动到具有有意义名称的单独.h文件中。例如MyGeometry.h

确保你给你的函数给出一个描述性的名称,如:

static inline CGPoint CGPointMakeRandom() { 
    // your code 
    return point; 
} 
+0

非常感谢!这像一个魅力。所以我不需要单独的实现文件,我可以在.h文件中写入所有内容? – Hristo

+0

你可以添加一个实现文件,但是这个函数往往非常简单,以便内联定义它们会更加方便。随着复杂性的增加,您可能希望将实现移至.m以避免混乱.h –

+0

另请参见:http://stackoverflow.com/questions/7762731/whats-the-difference-between-static-and-static-内联函数 –

0

你能与类方法独立客观的C类。

在头文件中声明这样的方法(假设你想叫它

#import <UIKit/UIKit.h> 

@interface pointHelper : UIViewController 

    +(CGPoint) randomPoint; 

然后在.m文件

@implementation pointHelper 
    +(CGPoint) randomPoint{ 
     //// implementation 
    } 

当你想唤起的方法另一个文件

#import "pointerHelper.h" 

然后您将能够访问像这样的方法...

CGPoint thePoint = [pointHelper randomPoint]; 

或者,如果你有一个类的对象..

CGPoint thePoint = [[pointHelperObject class] randomPoint]; 

这是做一个更好的方式,因为它使你的代码更加清晰。 [pointHelper randomPoint]告诉你为什么你在唤起方法以及它在做什么。你正在使用一个具有积分功能的类,并且你正在使用它来获取一个随机点。你不需要一个对象来唤起这个方法,因为它是由类抽象地控制的。注意不要试图在类方法中访问类的属性。

+0

或者,如果您尝试使用c方式,您可以使用pmd的答案。虽然我建议你以客观的方式来做,因为它更清晰。 – AdamG

+0

Cocoa Touch使用C函数来处理CGPoint创建,而不是类方法,可能是因为点具有这样一个简单的结构。 我认为最好保持这种做法。 供参考检查他们的几何。h文件 –

+0

是的,我猜这是个人喜好和效率的问题。 – AdamG