我看到了一个基于角色的iOS项目,其中在应用程序启动时作者启动了几乎所有视图和控制器。它主要使用NSNotification在它们之间进行通信。甚至NSNotification属于同一类,这意味着所有通知都具有相同的名称:

[[NSNotificationCenter defaultCenter] addObserver:aObserver selector:aSelector name:*notification_name* object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:*notification_name* object:parameter];

它根据不同的notification.object告知不同的通知类型,这是NSObject的自定义子类,其中仅包含一些整数,一些字符串和一些对象,例如
@interface Parameter : NSObject
{
    // which is an enumeration type to actually define different notification type
    ParameterID             m_iVCD_ID;

    int                     m_iInt0;
    int                     m_iInt1;
    int                     m_iInt2;
    float                   m_fFloat0;
    float                   m_fFloat1;
    float                   m_fFloat2;
    NSString                *m_sString0;
    NSString                *m_sString1;
    NSString                *m_sString2;
    NSMutableArray          *m_oArray;

    NSObject                *m_oObject;
    NSObject                *m_oObject0;
    NSObject                *m_oObject1;
    NSObject                *m_oObject2;
}

我觉得这不是一个好主意,因为没有对notification.object进行类型检查。
基于通知的体系结构是一个广播系统,因为它对所有通知使用相同的名称。此外,一开始初始化所有UIView和UIViewController会占用大量内存。但是,在使用管理器时,我没有从控制台看到任何内存警告,但在console.app中没有看到。

任何人都可以提出其他建议吗?这个架构还有其他不好的方面吗?

最佳答案

我认为这是一种非常非常糟糕的方法。

您评论中的每个论点都是正确的:

我觉得这不是一个好主意,因为没有对notification.object进行类型检查。

当然。

基于通知的体系结构是一个广播系统,因为它对所有通知使用相同的名称。

除非有意,否则绝对没有道理。

此外,一开始初始化所有UIView和UIViewController会占用大量内存。但是,在使用管理器时,我没有从控制台看到任何内存警告,但在console.app中没有看到。

是的,即使没有发出内存警告也浪费了内存。 UIViewUIViewController具有它们自己的生命周期,并且SDK为您提供了在需要时加载和卸载(分配和释放)资源的方法。

除此之外,控制器之间的通信应通过@property,协议或SDK提供的任何其他方法进行。

从苹果文档:

给定通知的观察者可能处于暂停状态,并且不会立即处理通知。

因此,您不能依靠它们来执行关键任务。

关于ios - 对于iOS项目,初始化项目中所需的所有UIViewController和UIView是否是一种好习惯?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23425822/

10-13 09:21
查看更多