【发布时间】:2011-08-31 20:54:00
【问题描述】:
我有一个设计相关的问题。
我看到 UIApplication 类有这种标志:
UIKIT_EXTERN NSString *const UIApplicationDidEnterBackgroundNotification
UIKIT_EXTERN NSString *const UIApplicationWillEnterForegroundNotification
UIKIT_EXTERN NSString *const UIApplicationDidFinishLaunchingNotification;
UIKIT_EXTERN NSString *const UIApplicationDidBecomeActiveNotification;
UIKIT_EXTERN NSString *const UIApplicationWillResignActiveNotification;
UIKIT_EXTERN NSString *const UIApplicationDidReceiveMemoryWarningNotification;
另一方面,UITableView 类声明如下结构:
typedef enum {
UITableViewScrollPositionNone,
UITableViewScrollPositionTop,
UITableViewScrollPositionMiddle,
UITableViewScrollPositionBottom
} UITableViewScrollPosition;
一个用于通知,另一个用于定义对象的类型。我相信这两个是“标记”一些相关对象并在运行时根据该标志做出决定的设计选择。
假设我想创建一个需要标记的对象工厂。 在下图中,我想要每个部分和小部件的枚举或 ID。任何小部件将如何通信或“调用”另一个小部件? e.j. [[容器共享实例] presentWidget:??对于部分:?? withInfo:(id)info];
选择其中之一是否有更深或更准确的理由? 感谢您的帮助。
【问题讨论】:
-
请注意,第一个是字符串的“集合”,第二个是整数的选择(从 @ 0 开始)
-
按照凯文所说的,我不相信你可以制作一个字符串枚举。枚举非常适合对标签进行分组。在我的公司,我们通常会明确设置枚举值,以防我们决定在以后删除枚举值。一些保持状态的代码可能使用枚举值来指示状态,但是如果您加载应用程序的新版本并删除了某个值,这将影响枚举中的所有值,除非它们被明确指定。
-
我想到的一件事是,对于字符串,您不必知道将接收这些字符串的对象的接口。使用枚举,涉及的每个对象都会知道接收器接口......我说的对吗?
标签: objective-c ios design-patterns