gpt4 book ai didi

objective-c - 只读 socket ?

转载 作者:行者123 更新时间:2023-12-04 06:26:09 24 4
gpt4 key购买 nike

假设我有一个类。我想通过以下方式声明一个属性:

  • 从类外部,如果以编程方式访问,它应该是只读的;
  • 应该可以使用 socket 从 Interface Builder 设置值;
  • (从类内部它应该是可写的,但我知道该怎么做)。

  • 我想出的“解决方案”是写一个一次性 setter :
    - (void) setA: (ClassA *)a {
    if (aHaveBeenSet)
    return;
    else {
    // do what a setter have to do
    aHaveBeenSet == YES;
    }
    }

    但是这个 setter 仍然可以从代码中调用(虽然只有一次有效),所以它不是一个很好的解决方案。

    另一种方法是将 ivar 标记为 IBOutlet 并使属性 readonly像这样:
    @interface MyClass : NSObject {
    IBOutlet ClassA *a;
    }
    @property (readonly) ClassA *a;
    @end

    但根据 this answer ,这是一种糟糕的风格,并且使内存管理不清楚。

    有任何想法吗?

    最佳答案

    如果我错了,有人纠正我,但我认为 NIB 加载机制仅在运行时实例化 .nib 文件时检查设置方法。所以这意味着您可以将您的公共(public)属性声明为只读,但在您的 .m 文件中编写一个“私有(private)” setter :

    // MyClass.h
    @property (readonly, retain) IBOutlet ClassA *a;
    // MyClass.m
    @interface MyClass ()
    @property (readwrite, retain) ClassA *a;
    @end

    @implementation MyClass
    @synthesize a;
    ...
    @end

    关于objective-c - 只读 socket ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6023811/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com