2014-05-02 16 views
2

我見過一個基於角色的iOS項目,作者在應用程序啓動時啓動幾乎所有的視圖和控制器。它主要使用NSNotification進行通信。即使是NSNotification是同一種,這意味着所有的通知具有相同的名稱:對於iOS項目來說,初始化項目中所需的所有UIViewController和UIView是否是一種很好的做法?

[[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。 而基於通知的架構是一個廣播系統,因爲它爲所有通知使用相同的名稱。另外,在開始時初始化所有的UIViews和UIViewControllers需要花費大量的內存。但是,在使用管理器時,我沒有看到控制檯發出任何內存警告,但在console.app中發現了任何內存警告。

任何人都可以提供一些其他的建議嗎?此架構的其他任何不良方面?

+1

http:// nshipster。com/nsnotification-and-nsnotificationcenter/ – BoilingLime

回答

1

我認爲這是一個非常非常糟糕的做法。

在您的評論任何爭論是正確的:

我覺得這是不是一個很好的主意,因爲沒有類型檢查的notification.object。

當然。

而基於通知的架構是一個廣播系統,因爲它對所有通知使用相同的名稱。

除非有意,否則絕對沒有意義。

另外,在開始時初始化所有UIViews和UIViewControllers會花費很多內存。但是,在使用管理器時,我沒有看到控制檯發出任何內存警告,但在console.app中發現了任何內存警告。

是的,即使沒有內存警告被激發,它也在浪費內存。 UIView s和UIViewController都有自己的生命週期,並且SDK提供了在必要時加載和卸載(分配和釋放)資源的方法。

除此之外,控制器之間的通信應該通過@property,協議或SDK提供的任何其他方法完成。

從蘋果文檔:

給定的通知的觀察者可以處於暫停狀態,而不是立即處理的通知。

所以你不能依靠他們來執行,比方說,關鍵的任務。

+0

是的,我閱讀了文檔。 http://nathanmock.com/files/com.apple.adc.documentation.AppleiOS6.0.iOSLibrary.docset/Contents/Resources/Documents/#documentation/Cocoa/Conceptual/Notifications/Articles/Posting.html – user3595773

+0

如果您考慮答案是有效的,請將其標記爲讓其他人檢查。 – sonxurxo

相關問題