ios - 如何在 Objective-C 中访问公共(public)实例变量?

标签 ios objective-c

我有以下情况:

@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/

相关文章:

ios - 调用 setViewControllers :animated: 后方向更改崩溃

ios - 确认有人下载了 iOS 应用程序

objective-c - 即使我在 shouldAutorotate 上返回 NO, View 也会被旋转

ios - CoreData加密提交到应用商店时是否需要任何类型的额外文件

ios - 识别同一位置的所有节点

ios - 如果我在不使用导航 Controller 的情况下以编程方式呈现 ViewController,新的 VC "replace"是旧的,还是堆叠在顶部?

iphone - 如何在 UIView 中使用 CAAnimation 添加波纹动画

ios - UIDocumentPickerViewController文件已禁用?

objective-c - 在标签栏 Controller 之间共享整数值

ios - 如何以编程方式显示 View