-1

我不明白如何在 Object-C 中将变量设为私有,在 Java 中我可以这样做:

public class Counter {
private int cont;

public Counter(){
    cont = 0;
}
public Counter(int v){
    cont = v; }

public void setValue(int v){
    cont = v;
}
public void inc(){
    cont++; }

public int getValue(){
    return cont;
}
}

进而:

public class MyClass extends Counter {

public static void main(String[] args) {

    Counter myC = new Counter();

    System.out.println(myC.getValue());
    //System.out.println(myC.cont); don't work because it's private
}

}

所以我无法访问变量 myC.cont 因为显然它是私有的,在 Object-C 中我做了同样的事情但不起作用:

@interface Counter : NSObject {
@private int count;
}

- (id)initWithCount:(int)value;
- (void)setCount:(int)value;
- (void)inc;
-(int)getValueCount;

@end

#import "Counter.h"

@implementation Counter

-(id)init {

count = 0;

return self;
}

-(id)initWithCount:(int)value {

self = [super init];

[self setCount:value];

return self;

}

- (void)setCount:(int)value {

count = value;
}

- (void)inc {

count++;
}

-(int)getValueCount {

return count;
}

@end

然后从 main.m 调用它:

#import "Counter.h"

int main(int argc, const char * argv[])
{

@autoreleasepool {

    NSLog(@"Hello, World!");
    Counter *myC = [[Counter alloc] init];
    [myC inc];
    [myC inc];
    [myC inc];

    myC.count = 1;
    NSLog(@"%d",myC.getValueCount); //it's 1 instead of 3


}
return 0;
}

我不明白我可以访问 count 变量,我怎样才能像在 java 中一样将其设为私有?

4

2 回答 2

1

myC.count不是访问您的变量,而是访问您定义的方法-(int)count;。因为 myC 是一个 Counter 类型的指针,所以您可以通过像这样取消引用指针来直接访问它的成员变量myC->count。然而,这是不可取的。Obj-C 内置了使用 @property 关键字生成 getter 和 setter 的功能。

但是一个断点`-(int)count并观察该方法被调用。

于 2012-10-24T15:47:44.103 回答
0

最好的方法是使用类扩展并在.m文件中定义您的私有变量:

我的类.h

@interface MyClass
   <PUBLIC DECLARATIONS, variables and methods>
@end

我的班级.m

@interface MyClass ()
@property (nonatomic,...) int count;
...
- (void)privateMethod:(...;
@end

@implementation MyClass
@synthesize count;
...
- (void)privateMethod:(...) {

}
...
@end
于 2012-10-24T15:24:55.487 回答