私有实例变量-iPhone SDK

私有实例变量-iPhone SDK,iphone,objective-c,Iphone,Objective C,我在iPhone应用程序中有一些变量作为类实例变量(它们必须是类实例变量,因为它们在该类的多个方法中使用) 但是,我不想让它们暴露于父类。我已经看到了@private关键字,但我不确定这是否是正确的用法 有人知道如何将实例变量保持为类的私有变量吗 这可能也是一个客观的C问题,不一定是针对iphone的 非常感谢,, 布雷特@private让你的意图变得清晰,这是你的方向 编辑: @interface YourClass : NSObject { @private int privateD

我在iPhone应用程序中有一些变量作为类实例变量(它们必须是类实例变量,因为它们在该类的多个方法中使用)

但是,我不想让它们暴露于父类。我已经看到了
@private
关键字,但我不确定这是否是正确的用法

有人知道如何将实例变量保持为类的私有变量吗

这可能也是一个客观的C问题,不一定是针对iphone的

非常感谢,, 布雷特

@private让你的意图变得清晰,这是你的方向

编辑:

@interface YourClass : NSObject {
@private
    int privateData;
@public
    int publicData;
}

// method declarations....

@end
@私密让你的意图变得清晰,这是你的方向

编辑:

@interface YourClass : NSObject {
@private
    int privateData;
@public
    int publicData;
}

// method declarations....

@end

@private指令意味着实例变量只能在声明它的类中访问。如果您希望子类能够访问实例变量,请使用@protected指令。我不太清楚您说不希望实例变量暴露于父类时的意思,但我非常确定那是你想要的

您可以使用如下指令:

@interface MyClass : NSObject {
@private
    float privateFloat;
    float anotherPrivateFloat;
@protected
    float protectedFloat;
@public
    float publicFloat;
}

实例变量的默认作用域是受保护的。

指令@private意味着实例变量只能在声明它的类中访问。如果您希望子类可以访问实例变量,请使用@protected指令。我不太清楚您说不需要实例变量是什么意思ce变量公开给父类,但我非常确定@private是您想要的

您可以使用如下指令:

@interface MyClass : NSObject {
@private
    float privateFloat;
    float anotherPrivateFloat;
@protected
    float protectedFloat;
@public
    float publicFloat;
}
实例变量的默认范围受保护。

目标C中的类实例变量(假设您指的是可以在一个对象中设置并在同一类的另一个对象中读取的变量)与普通ANSI C中的静态全局变量相同(假设您将一个类实现放在一个.m文件中)

静态全局变量不会暴露于包含这些类实例变量的实现文件之外的任何其他类(super、sub、alien等)或代码

这里的其他答案中的@private声明内容很可能是不正确的(取决于您的术语的含义),因为这些实例变量没有类范围,但对每个单独的对象都是私有的(除非由属性公开)。

类实例变量(假设您指的是可以在一个对象中设置并在同一类的另一个对象中读取的变量)在Objective C中与普通ANSI C中的静态全局变量相同(假设您将一个类实现放在一个.m文件中)

静态全局变量不会暴露于包含这些类实例变量的实现文件之外的任何其他类(super、sub、alien等)或代码


这里的其他答案中的@private声明内容很可能是不正确的(取决于术语的含义),因为这些实例变量没有类范围,但对每个单独的对象都是私有的(除非由属性公开).

但是我还没有找到如何实现@private。有什么想法吗?我应该把它放在哪里作为一组变量?我应该如何将它们从我想公开的变量中分离出来?非常感谢!这也可以用于类方法吗?即@private-(void)method1;@private不能用于任何具有类范围的变量(例如,可以从类中的任何对象访问的单个公共内存位置)。@hotpaw2:您是否否决了投票?问题是关于实例变量-错误地称为“类实例”变量。@Brett:不,只有IVAR可以进行私有访问。方法(或属性)每个人都可以访问。但是我还没有找到如何实现@private。有什么想法吗?我应该把它放在哪里作为一组变量?我该如何将它们与我想公开的变量区分开来?非常感谢!这也可以用于类方法吗?即@private-(void)method1;@private不能用于任何具有类范围的变量(例如,可以从类中的任何对象访问的单个公共内存位置)。@hotpaw2:您是否否决了投票?问题是关于实例变量-错误地称为“类实例”变量。@Brett:不,只有IVAR可以进行私有访问。方法每个人都可以访问(或属性)。方法呢?有没有办法通过@private指令保持它们的私有性?我不知道。你可以使用一个名称为空的类别来隐藏方法声明,以声明“私有API”但据我所知,隐私权并没有得到强制执行。这就是为什么你听说iPhone应用程序因被称为苹果的“隐私”而被拒绝的原因方法。检查这个问题:方法如何?有没有办法通过使用@private指令来保持它们的私有性?我不知道。你可以使用一个空名称的类别来隐藏方法声明,以声明“私有API,”但据我所知,隐私并没有被强制执行。这就是为什么你听说iPhone应用程序因为被称为苹果的“私有”方法而被拒绝。看看这个问题:Brett问了一个变量,他可以在几个方法中使用——不能在多个实例之间共享。另外,在Obj-C中也没有真正的“类变量”(至少与类方法相比,它们不是同一级别)。Brett询问了一个变量,他可以在几个方法中使用,而不是在多个实例之间共享。此外,Obj-C中实际上没有“类变量”的东西(至少与类方法相比,它们不是同一级别)。实例变量从来都不是“暴露于父类”实例变量永远不会“暴露于父类”