内部Obj C的for循环内部协议,就像Java

时间:2015-08-27 01:23:15

标签: java objective-c interface protocols

我正在尝试在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中执行此操作的方式有任何问题吗?

1 个答案:

答案 0 :(得分:0)

一个。

- (NSObject *)register;

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

- (id)register;

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

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

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

除此之外,&#34;创造&#34;听起来像是一个创建并返回成功标志的方法。我称之为-defaultSubscribers。是否创建它们是一个实现细节:

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