【问题标题】:Using alloc in objective c for my own classes在我自己的类中使用目标 c 中的 alloc
【发布时间】:2012-09-16 20:42:26
【问题描述】:

当我在我创建的类上使用alloc 时(例如在具有底层NSMutableArray 对象的堆栈类上),它会将alloc 应用于它的所有属性吗?还是我必须重写alloc 方法以确保在属性上调用alloc

【问题讨论】:

    标签: objective-c alloc


    【解决方案1】:

    您不需要重写 alloc 方法,属性将为您初始化为它们的默认值,即对象为 nil,原始类型为默认值。

    所以你需要做的就是:

    [[myObject alloc] init]; or the shortcut [myObject new];
    

    你不能覆盖 alloc 方法,所有的属性都会被设置为它们的默认值。但是,您可以覆盖 init,为属性设置初始值(而不是它们的默认值):

    - (id) init {
       self = [super init];
         if (self) {
           //initialize some properties
         }
       return self;
    }
    

    【讨论】:

    • 我不同意一点:当然在 MRC 环境中,您可以覆盖 alloc 方法。
    • 实际上,如果属性是对象,属性将自行分配初始化,我不同意这一点。相反,它们将被设置为 nil。
    • @Oscar,我可以想到一个理由:如果我创建一个单例以确保无法创建两个实例,我会覆盖 alloc
    • @James 您为此覆盖 init 并执行一次错误分配以分配您的对象一次。
    • alloc 实际上进行了初始化。它将isa 指针初始化为正确的类指针,并将所有iVar 初始化为0
    【解决方案2】:

    不会为您分配所有属性。
    但是,不要为此重写 alloc,重写 init 以分配并初始化属性。

    【讨论】:

      【解决方案3】:

      一般情况下,不会为您分配属性。但是,您在 IB 中添加并设置为网点的网点将自动创建。

      【讨论】:

        猜你喜欢
        • 2012-03-13
        • 2012-04-26
        • 2011-11-27
        • 1970-01-01
        • 2014-12-30
        • 2014-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多