gpt4 book ai didi

objective-c - 为 NSOperationQueue 创建 Setter

转载 作者:行者123 更新时间:2023-12-03 17:33:22 25 4
gpt4 key购买 nike

我必须创建一个原子的NSOperationQueue

@property (atomic, strong) NSOperationQueue *queue;

我有这个 setter/getter :

- (NSOperationQueue *)queue {
if (_queue == nil) {
_queue = [NSOperationQueue mainQueue];
[_queue setMaxConcurrentOperationCount:1];
}
return _queue;
}

但是 Xcode 说我必须创建一个 setter。

我的这个案例的 setter 应该是什么样的?我不知道。

最佳答案

两个观察结果:

  1. 如果您要定义自己的 setter,它可能如下所示:

    - (void)setQueue:(NSOperationQueue *)queue {
    _queue = queue;
    }

    请记住,如果您实现两种访问器方法(setter 和 getter),则必须手动合成 ivar,例如

    @synthesize queue = _queue;

    在你的@implementation中,因为编译器无法再安全地假设您根本需要特定名称的 ivar。

  2. 您应该重新考虑这是否应该是 atomicnonatomic 。你的 getter 不是 atomic (我的示例 setter 也不是),所以您可能只想将其设为 nonatomic 。是atomic “意味着合成的访问器确保值始终由 getter 方法完全检索或通过 setter 方法完全设置,即使从不同线程同时调用访问器也是如此”(来自 Programming with Objective-C: Properties are atomic by default )。您通常不需要原子访问器方法,但如果需要,您将更改这些实现以进行相应的同步(例如,使用 NSLock@synchronized 指令、串行队列、读写器模式等)。

    请注意,如果您成功了nonatomic ,这也消除了您编写自定义 setter 来配合自定义 getter 的需要。如果您为 atomic 实现了自己的 getter属性,编译器无法合成相应的 atomic setter ,因为它无法知道如何将其 setter 与 getter 同步(因为有很多不同的可能的同步机制)。但如果你让你的属性(property) nonatomic ,在不需要同步的情况下,编译器可以为您合成简单的、不同步的 setter,并且指示您实现 setter 的警告也将消失。

关于objective-c - 为 NSOperationQueue 创建 Setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47501767/

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