当前位置:  开发笔记 > IOS > 正文

Objective-C:对象声明问题

如何解决《Objective-C:对象声明问题》经验,为你挑选了1个好方法。

有一些我试图理解的东西.我在我的AppsController-Class中为Cocoa应用程序提供了这个对象声明

NSMutableArray *personArray;

在可以将此声明放在Header文件中或在代码文件中的类的实现内.没什么区别.我甚至可以将它放在#import命令下的@implementation上下文之外.应用程序工作得很好.

既然我没有从AppsController类继承或做任何其他想象,我想知道这些类型的声明之间可能有什么区别?

声明真的属于哪里?



1> Alex Rozansk..:

这取决于您希望如何使用变量.如果将变量声明放在类的接口中,则类的每个实例都将拥有自己的变量副本,该变量与类的所有其他实例分开:

@interface AppsController : NSObject
{
    NSMutableArray *personArray;
}

AppsController该类的每个实例都有自己的personArray变量副本,该副本与该类的所有其他实例分开.

但是,如果您在接口之外定义变量,它将变为全局变量,并且它是共享的(您的类的实例不会获得自己的副本),并且可以从您的类的任何实例访问它.如果你在标题中声明它:

NSMutableArray *personArray;

它对包含标题的其他文件和类中的方法也是可见的.

如果在实现文件中声明变量,但在实现本身之外,并在前面加上static关键字,则变量只对类的实现可见.当您需要一个对所有类实例可见但对其他任何人不可见的变量时,这很常见,并且是一种创建类变量的方法.

由于您的对象是控制器对象,我猜您在应用程序中只有一个实例.您应该声明变量:

    作为实例变量,如果您的personArray变量需要对控制器类的每个实例都是唯一的(即使您现在只有一个实例,将来可能会有多个实例).

    作为类变量(使用static关键字),如果您希望变量对您的类的所有实例可见,只有一个共享变量实例.

    作为全局变量,如果您希望变量是单个实例(对于类的实例不是唯一的),并且对其他类或其他文件中的代码也是可见的.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有