gpt4 book ai didi

iphone - 在 Objective-C 中只写属性

转载 作者:太空狗 更新时间:2023-10-30 03:09:45 27 4
gpt4 key购买 nike

我被 objective-c 属性困住了。我需要的是为变量分配一个只写属性,与只读相反,即变量可以有setMethod,但不应该有getMethod。我不知道该怎么做。感谢您提供一些代码片段的答案。

最佳答案

另一种有效的方法是声明普通属性并使 getter 不可用

@interface MyClass
@property NSString * var;
- (NSString *)var UNAVAILABLE_ATTRIBUTE;
@end

如果有人试图访问 getter,这将引发编译时错误。


这种方法的主要优点是您实际上拥有一个真正的属性TM,而不是一个由实例变量和 setter 伪造的代理项,这意味着:

  • 在 Xcode 中使用点符号时,您将获得自动完成功能
  • 所有运行时函数,例如 class_getPropertyclass_copyPropertyList将按预期工作。

也就是说,getter 实现无论如何都是合成的,它可以使用类似的东西调用

NSString * string = [myObj performSelector:@selector(var)];

或使用 NSInvocation (在非 id 属性的情况下)

如果您很偏执并且您真的想要阻止客户端调用 getter,您可以通过提供自己的实现来显式抛出异常。

@implementation MyClass
- (int)var {
[NSException raise:NSInternalInconsistencyException
format:@"property is write-only"];
}
@end

无论如何,如果有人真的想篡改您的实例变量,他们可以使用运行时来访问它,因此考虑到用例,最后的预防措施可能毫无用处。编译时错误才是您真正要找的。

关于iphone - 在 Objective-C 中只写属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4266197/

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