0

假设以下所有代码都写在一个实现文件中。有人可以解释一下两者之间的区别:

#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 相比如何?

4

1 回答 1

0

属性和实例变量之间的区别应该很明显。

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

于 2016-01-13T16:12:32.220 回答