我有一个类,它有一些方法只能在类本身中使用。存在这些方法是因为我正在进行图形工作的三步过程,但我只希望类的实例访问这些计算的最终结果,简化示例:
#import <Foundation/Foundation.h>
@interface GraphicsWorld : NSObject
@property(nonatomic, strong) NSMutableArray *objects;
@property(nonatomic, strong) NSMutableArray *adjustedObjects
/* three methods I'll never use outside of this class
I want to find a way to get replace these methods.
*/
-(void) calcTranslation;
-(void) calcRotation;
-(void) calcPerspective;
/* the one method I'll use outside of this class */
-(NSMutableArray *) getAdjustedObjects;
@end
我可以在我的实现之外定义c函数,但是他们将无法访问这些属性:
#import <Foundation/Foundation.h>
#import "GraphicsWorld.h"
void calcTranslation()
{
// I'm useless because I can't access _objects.
}
void calcRotation()
{
// Hey, me too.
}
void calcPerspective()
{
// Wow, we have a lot in common.
}
@implementation GraphicsWorld
-(NSMutableArray *) getAdjustedObjects
{
calcTranslation();
calcRotation();
calcPerspective();
return adjustedObjects;
}
@end
答案 0 :(得分:0)
除@implementation
文件中的.h
部分外,您还可以在.m
文件中添加一个私有文件。正如您在.h
文件的@implementation
中声明方法和属性一样,您也可以在.m
中执行相同操作。
答案 1 :(得分:0)
除非我误解了你的问题,否则听起来你只是想隐藏你的方法不公开?如果是这样,只需从标题中删除它们即可。您不再需要在objc(Xcode)中预先声明方法。编译器现在只在内部找到它们。
答案 2 :(得分:0)
可以调用一个方法,无论它是声明为私有,还是不放入头文件中;由于Objective-C隐藏方法的性质很难。
隐藏函数要容易得多,只需声明它们static
即可。要访问当前实例,您只需传入对它的引用 - 即具体是幕后的Objective-C。
例如:
void calcTranslation(GraphicsWorld *self)
{
// Access properties, instance variables, call instance methods etc.
// by referencing self. You *must* include self to reference an
// instance variable, e.g. self->ivar, as this is not a method the
// self-> part is not inferred.
}
并称之为:
-(NSMutableArray *) getAdjustedObjects
{
calcTranslation(self);
...