我有以下情况:
@interface MyClass:NSObject
@public NSString *str;
@end
@implementation
-(id)init{
}
@end
现在我想在其他类中访问 MyClass 之外的 str 变量,(1) 使用 MyClass 对象 (2) 而不使用 MyClass 对象,我该如何实现?
最佳答案
你可以用这个调用:
MyClass *a;
a.str;
没有对象,就不能调用实例变量。但是,您可以使用此声明调用静态方法:
@interface MyClass:NSObject
+ (void)doX;
@end
@implementation
+ (void)doX {
// do whatever
}
然后在另一个类中你只需要调用:
[MyClass doX];
但是,让一个公共(public)实例变量不是一个好习惯。原因是它会让任何类、方法在不受您控制的情况下更改该实例变量。例如,他们可以将 NSString *str 设置为 nil 然后任何人都无法调用任何东西,或者他们可能会在调用时忘记进行内存管理。
公共(public)变量的更好做法是使用@property
例如,您的字符串应声明为:
@property (nonatomic, retain) NSString * str;
然后在实现中:
@implementation MyClass
@synthesize str;
关于属性的好处是编译器会为您生成 gettter 和 setter 方法,这些 setter 会为您正确处理内存。
更多关于 properties here
关于ios - 如何在 Objective-C 中访问公共(public)实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3628144/