Objective-C:什么是私有什么不是?

Joh*_*lph 3 private objective-c

为什么人们在使用

@interface ViewController : UIViewController 
{
@private
    UIButton* button_;
}
Run Code Online (Sandbox Code Playgroud)

公共标题中的@private声明?在实现中声明变量会产生相同的结果,不是吗?我觉得很奇怪,我认为公共标题应该只包含真正的公众成员.如何处理受保护的成员?

@implementation ViewController
    UIButton* button_;
@end
Run Code Online (Sandbox Code Playgroud)

我所知道的唯一区别是这个变量只在当前编译单元内可见(.m文件,对吧?)

方法是否也适用?我可以通过适当的方法排序或转发声明来编译.为什么人们关心为私有方法声明类别?仅用于测试目的?

pgb*_*pgb 7

@implementation块内的变量声明将创建一个全局变量,而不是实例变量.实例变量需要定义为@interface.

虽然您可以@interface通过类别或扩展创建其他块,但它只能包含方法声明,而不能包含实例变量.