在 Obj C 内部的 for 循环中的协议,就像在 Java 中的 for 循环中的接口一样

Protocol inside for loop for inside Obj C, just like interface inside for loop inside Java

我正在尝试在 Objective C 中做类似的事情,我这里有这个 Java 代码:

public interface Subscriber {
    Object register();
    void unregister();
}

public void registerDefaultSubscribers() {
    mDefaultEventSubscribers.clear;
    mDefaultEventSubscribers.addAll(createDefaultSubscribers());
    for (Subscriber subscriber : mDefaultEventSubscribers)
        registerSubscriber(subscriber);
}

这就是我在 Objective-C

时考虑的做法
@protocol Subscriber <NSObject>

- (NSObject *)register;
- (void)unregister;

@end

# pragma registerSubscribers

- (void)registerDefaultSubscribers {
    [_defaultNotificationSubscribers removeAllObjects];
    [_defaultNotificationSubscribers addObjectsFromArray:[self createDefaultSubscribers]];
    for (id<CLNotificationSubscriber> subscriber in _defaultNotificationSubscribers) {
        [self registerSubscriber:subscriber];
    }
}

这看起来正确吗,我在 Objective C 中执行此操作的方式有任何问题吗?

A.

- (NSObject *)register;

Objective-C 动态输入。因此,如果您没有所有 return 值的公共基础 class,则使用 id 而不是 NSObjectNSObject 是一个可能的基础 class,而不是所有对象的基础 class。

- (id)register;

也许您想为类型添加协议。

B.

(void)registerDefaultSubscribers 
{
  [_defaultNotificationSubscribers removeAllObjects];
  [_defaultNotificationSubscribers addObjectsFromArray:[self createDefaultSubscribers]];
  …
}

假设 _defaultNotificationSubscribers 是一个(可变)数组,我不知道为什么要更改现有实例而不是创建新实例。为什么不使用 setter 和 getter 来启用 KVO?

除此之外,"create" 听起来像是一种创建方法,return 是一个成功标志。我会称之为 -defaultSubscribers。它们是否被创建是一个实现细节:

(void)registerDefaultSubscribers 
{
  self.defaultNotificationSubscribers = [self defaultSubscribers];
  …
}