我正在尝试在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中执行此操作的方式有任何问题吗?
答案 0 :(得分:0)
一个。
- (NSObject *)register;
Objective-C动态类型。因此,如果您没有所有返回值的公共基类,则使用id
而不是NSObject
。 NSObject
是一个可能的基类,而不是所有对象的基类。
- (id)register;
也许您想要为该类型添加协议。
乙
(void)registerDefaultSubscribers
{
[_defaultNotificationSubscribers removeAllObjects];
[_defaultNotificationSubscribers addObjectsFromArray:[self createDefaultSubscribers]];
…
}
假设_defaultNotificationSubscribers
是一个(可变)数组,我不知道为什么要更改现有实例而不是创建新实例。为什么不使用setter和getter来启用KVO?
除此之外,&#34;创造&#34;听起来像是一个创建并返回成功标志的方法。我称之为-defaultSubscribers
。是否创建它们是一个实现细节:
(void)registerDefaultSubscribers
{
self.defaultNotificationSubscribers = [self defaultSubscribers];
…
}