代码之家  ›  专栏  ›  技术社区  ›  Johannes Rudolph

目标C:什么是私人的什么不是?

  •  3
  • Johannes Rudolph  · 技术社区  · 16 年前

    @interface ViewController : UIViewController 
    {
    @private
        UIButton* button_;
    }
    

    @implementation ViewController
        UIButton* button_;
    @end
    

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

    方法也是如此吗?通过适当的方法排序或转发声明,我可以很好地编译。为什么人们喜欢为私有方法声明类别?仅用于测试目的?

    4 回复  |  直到 16 年前
        1
  •  7
  •   pgb    16 年前

    函数中的变量声明 @implementation @interface .

    而您可以创建一个附加的 块,但它只能包含方法声明,而不能包含实例变量。

        2
  •  4
  •   Dave DeLong    16 年前

    我想说的是,虽然您可能“感觉”将私有实例变量放在假定的公共头中是错误的,但我不担心这一点。

    既然苹果可以接受,我想你没什么好担心的

    仅供参考:默认情况下,所有实例变量都受保护。

        3
  •  3
  •   adonoho    16 年前

    方法也是如此吗?

    通过适当的方法排序或转发声明,我可以很好地编译。为什么人们喜欢为私有方法声明类别?仅用于测试目的?

    私有类别是向前声明的一种形式。你可以把它们想象成C原型。

    安得烈

        4
  •  0
  •   unknown unknown    16 年前

    @private仅指IVAR。

    默认情况下,您可以访问实例的IVAR,如下所示:- id iShouldNotDoThis = foo->bar;

    @私有意味着你不能像那样访问ivar,必须使用访问方法。

    id thisIsBetter = [foo bar];
    

    与私有类别或方法无关。