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

Obj C内部for循环的内部协议,就像Java内部for循环的内部接口一样,java,objective-c,interface,protocols,Java,Objective C,Interface,Protocols,我正在尝试在Objective C中执行类似的操作,这里有以下Java代码: public interface Subscriber { Object register(); void unregister(); } public void registerDefaultSubscribers() { mDefaultEventSubscribers.clear; mDefaultEventSubscribers.addAll(createDefaultSubs

我正在尝试在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];
    }
}
这看起来正确吗?我在目标C中的做法有什么问题吗

- (NSObject *)register;
Objective-C类型是动态的。因此,如果没有针对所有返回值的公共基类,则使用id而不是NSObject。NSObject是一个可能的基类,而不是所有对象的基类

- (id)register;
也许您想向该类型添加一个协议

B

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

除此之外,create听起来像是一个执行创建并返回成功标志的方法。我称之为默认订户。是否创建它们是一个实施细节:

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

我正在尝试创建一个类注册表,这些类将作为NSNotificationCenter上的观察者。感谢您解释id和NSObject!这是正确的方法吗?在Objective C.HashMap中也可以有类似的东西吗?我正在考虑使用NSMapTable。我真的不知道,为什么要在通知中心上注册观察者,因为通知中心已经关心观察者了。这背后的想法是什么?这不是重新发明轮子,而是一台使轮子转动的机器!?已经有了。不,没有必要。1.Cocoa集合是按它们是什么进行分组的,而不是如何实现它们。在大多数情况下,字典是正确的选择。NSMapTable用于内存管理和其他一些细节。现在忘了它吧。2.您不能在源代码中键入集合,因为Objective-C是动态键入的。然而,也有类似的支持,但这是为了向静态类型Swift解释现代编程技术。如果你不使用Swift,因为你不想回到70年代早期,那么也不要再考虑它了。也许对来自Java的你来说,使用静态类型更安全。这是一种感觉,不是别的。
(void)registerDefaultSubscribers 
{
  self.defaultNotificationSubscribers = [self defaultSubscribers];
  …
}