我想创建一个不能从外部访问的实例变量.在objective-c中可能有这样的情况吗?我记得苹果有私有变量之类的东西,但如果人们知道它们,他们可以使用它们.苹果称之为"私有API",但显然其他人可以访问这些东西,如果他们发现里面有什么.

直到现在,我一直认为这样的东西会创建一个私有实例变量:

@interface MyClass : NSObject {
    CGFloat weight;
}

没有@property,没有@synthesis,只有上面的声明.

我也知道苹果在PrivateInstanceVariables上添加了一个_infonto,但他们在某个地方说,他们不喜欢看到其他人这样做,因为这样做时,他们可能会覆盖意外隐藏的实例变量.

这里有什么诀窍?

推荐答案

可以在{}中使用@private关键字使所有后续变量声明私有.默认的可见性为@protected(与Java中的protected类似),通常效果良好.您必须明确地将一个变量声明为@public,才能在类外直接访问它.

This Apple documentation提供了关于可变范围和可见性的更多详细信息.

"私有API"和私有变量之间也有区别.在Objective-C中,不能将方法设置为私有——任何人都可以调用任何方法.有几种方法可以创建"秘密"方法,但这有点超出了这个问题的范围.以下是几个相关的问题:

至于变量前面的前导uu,请注意苹果也为"private"方法保留了这个前缀.保证避免出现问题的最佳方法是对自己的变量和方法使用常规命名约定.然而,除非您从Cocoa(而不是NSObject)中对某个对象进行子类化,否则您可以相当有信心不会遇到问题.

Objective-c相关问答推荐

Objective C 中的 RSA 实现

tableView:canEditRowAtIndexPath: 弹出 viewController 时崩溃

使用 CALayer 时无法编译代码

NSFileManager 唯一的文件名

更改 UIDatePicker 字体 colored颜色 ?

以原子方式写入文件与不写入文件之间的区别

如何获取 AppIcon 的 UIImage?

iOS 正确使用 @weakify(self) 和 @strongify(self)

Objective C 静态类变量

OSStatus 错误代码 -34018

使用 Objective-C 查找 IMEI 号码

Objective-C 中是否有一些文字字典或数组语法?

如何从 CGPoint 和 CGSize 创建 CGRect?

[NSNull null] 和 nil 有什么区别?

添加/删除带有动画的 UITableViewCell?

交换 NSMutableArray 中的元素

@dynamic 在 Objective-C 中做了什么?

`[super viewDidLoad]` 约定

如何获得设备的比例因子?

找出窗口中的 UIBarButtonItem 框架?