gpt4 book ai didi

c# - Objective-C 等效于 C# 只读变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:13 24 4
gpt4 key购买 nike

在 C# 中,我们可以将实例变量声明为 readonly 以指定它只能在声明期间或在其所属类的构造函数中作为赋值的主题:

private readonly int _myInt;

在 Objective-C 中,我知道一个属性可以这样声明为只读:

@property (readonly) int myInt;

但是,这等同于具有私有(private) set 访问器的 C# 属性,并且不保护相应的实例变量免于在初始化后“私下”重新分配。

有没有办法在 Objective-C 中模仿 C# 的 readonly 修饰符的行为,这样一个实例变量只能在其包含类的初始化器中赋值(注意 - 因为我希望能够在类初始化器期间分配给变量,const 修饰符不适合我的需要)?

如果这不可能,是否存在这种行为在 Objective-C 中不合适的概念原因?

最佳答案

Objective-C 最终是一种基于 C、指针丰富的语言。因此,一旦您拥有指向任何给定对象的实例的指针,您就可以随心所欲地直接进入并处理对象状态。如果没有 VM 或在进程内安全地强制执行只读内存的其他机制,任何此类机制都可能被击败。

因此,Objective-C 很久以前就选择了简单性而不是错误的安全感。

你不能在类之外重置readonly @property 的后备存储的值而不做一些非常卑鄙的事情;调用未在类的公共(public) @interface 中声明的方法,扰乱运行时 API,或者更糟的事情。

所以,最终,这些特性并没有被完全追求,因为这样做会消耗大量的工程人力,不会真正增加语言的安全性,并且会使语言本身变得更加复杂(随着要记住的其他关键字和规则)。

相关,看这个问题/答案:Why doesn't Objective-C support private methods?

关于c# - Objective-C 等效于 C# 只读变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16847034/

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