所以我已经构建了一些应用程序,现在我正在尝试构建一些其他人可以放入应用程序的iPhone代码。问题是如何从用户隐藏对象类头文件(.h)中的数据元素?
例如,不确定人们是否使用过medialets iPhone分析,但他们的.h没有定义任何数据元素。它看起来像:
#import <UIKit/UIKit.h>
@class CLLocationManager;
@class CLLocation;
@interface FlurryAPI : NSObject {
}
//miscellaneous function calls
@end
使用该头文件,它们还提供一个包含一些数据元素的程序集文件(.a)。他们如何在对象的生命周期内维护这些数据元素而不在.h文件中声明它们?
我不确定它是否重要,但.h文件仅用于创建单个对象,而不是同一类的多个对象(FlurryAPI)。
非常感谢任何帮助。感谢
答案 0 :(得分:0)
在我的头文件中,我有:
@interface PublicClass : NSObject
{
}
- (void)theInt;
@end
在我的源文件中,我有:
@interface PrivateClass : PublicClass
{
int theInt;
}
- (id)initPrivate;
@end;
@implementation PublicClass
- (int)theInt
{
return 0; // this won't get called
}
- (id)init
{
[self release];
self = [[PrivateClass alloc] initPrivate];
return self;
}
- (id)initPrivate
{
if ((self = [super init]))
{
}
return self;
}
@end
@implementation PrivateClass
- (int)theInt
{
return theInt; // this will get called
}
- (id)initPrivate
{
if ((self = [super initPrivate]))
{
theInt = 666;
}
return self;
}
@end
我使用theInt作为例子。添加其他变量以满足您的口味。
答案 1 :(得分:0)
我建议您使用类别来隐藏方法。
·H
#import <Foundation/Foundation.h>
@interface EncapsulationObject : NSObject {
@private
int value;
NSNumber *num;
}
- (void)display;
@end
的.m
#import "EncapsulationObject.h"
@interface EncapsulationObject()
@property (nonatomic) int value;
@property (nonatomic, retain) NSNumber *num;
@end
@implementation EncapsulationObject
@synthesize value;
@synthesize num;
- (id)init {
if ((self == [super init])) {
value = 0;
num = [[NSNumber alloc] initWithInt:10];
}
return self;
}
- (void)display {
NSLog(@"%d, %@", value, num);
}
- (void)dealloc {
[num release];
[super dealloc];
}
@end
您无法通过点表示法访问私有实例变量,但仍可以使用[anObject num]获取值,但编译器会生成警告。这就是为什么Apple可以通过调用PRIVATE API来拒绝我们的应用程序。
答案 2 :(得分:0)