gpt4 book ai didi

ios - 属性(property)还是非属性(property)?

转载 作者:行者123 更新时间:2023-12-01 19:03:42 25 4
gpt4 key购买 nike

关于语义的快速问题:)

如果我正在编写一个协议(protocol),这是首选:

// (a)
@protocol MyProtocol

@property (nonatomic, copy) NSSet *things;

@end

对比
// (b)
@protocol MyProtocol

- (NSSet *)things;
- (void)setThings:(NSSet *)things;

@end

(a) 是更简洁的代码,但暗示实现类将具有 things 的 ivar ,在我的项目中并非如此。由于我的用例, things也不能是KVO。这也意味着实现类将 copy things ,这对我来说并不是在所有情况下都这样做。

(b) 是更准确的代码(它非常明确地说明了你能/不能做什么,即没有 KVO),但它有点困惑。

有什么意见吗?

最佳答案

我正在修改我的答案,即(a)可能不是最好的协议(protocol),但最适合非协议(protocol)接口(interface)。

我会选择 @property .如何实现属性是一个实现细节,我从不从外部考虑。

考虑一个 v1 实现,其中属性仅此而已。在 v2 中,内部结构发生了变化,setter 或 getter 都成为了一个方法。完全合理,属性好的原因之一,它们允许这样的更改,它们隐藏了实现细节。

还要考虑相反的情况,在下一个版本中需要删除方法并用属性替换它们。同样是一个实现细节,第一个实例中的属性很好地涵盖了。

最后,在这种情况下,有一个 copy属性提供了如何处理对可变对象的调用的显式信息,该信息在方法实现中丢失。

关于ios - 属性(property)还是非属性(property)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21165558/

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