ivars vs类扩展

时间:2016-01-13 15:05:33

标签: objective-c properties instance-variables class-extensions

假设以下所有代码都写在实现文件中。可以解释一下有什么区别:

#1

    @interface ViewController ()
    @property (nonatomic) NSDictionary *currentAlbumData;
    @end

    @implementation ViewController

#2
    @interface ViewController () {
    NSDictionary *currentAlbumData;
    }
    @end

    @implementation ViewController

#3
    @interface ViewController
    @end

    @implementation ViewController {
    NSDictionary *currentAlbumData;
    }

    - some methods here - 
    @end

我看到它的方式,第一个在类扩展中声明了一个属性变量。第二个在类扩展中声明一个实例变量。第三个声明了一个不是类扩展的实例变量......这意味着什么?如何在类扩展中简单地声明一个ivar?

1 个答案:

答案 0 :(得分:0)

属性和实例变量之间的区别应该是显而易见的。

在扩展中定义ivar与实现之间的区别在于可见性。虽然您的帖子中包含的私人扩展程序通常与实施文件写在同一个文件中,但它们并非必须如此。接口可以在任何地方定义,编译器/链接器可见的所有扩展在构建时一起汇总到一个类定义中。