如何隐藏分布式代码的变量

时间:2010-08-04 03:46:29

标签: iphone objective-c

所以我已经构建了一些应用程序,现在我正在尝试构建一些其他人可以放入应用程序的iPhone代码。问题是如何从用户隐藏对象类头文件(.h)中的数据元素?

例如,不确定人们是否使用过medialets iPhone分析,但他们的.h没有定义任何数据元素。它看起来像:

#import <UIKit/UIKit.h>

@class CLLocationManager;
@class CLLocation;

@interface FlurryAPI : NSObject {
}

//miscellaneous function calls
@end

使用该头文件,它们还提供一个包含一些数据元素的程序集文件(.a)。他们如何在对象的生命周期内维护这些数据元素而不在.h文件中声明它们?

我不确定它是否重要,但.h文件仅用于创建单个对象,而不是同一类的多个对象(FlurryAPI)。

非常感谢任何帮助。感谢

3 个答案:

答案 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)