2012-10-07 33 views
1

我不能在文檔中發現內存是如何爲userInfo字典的NSNotification的處理。如果你指定一個,這只是一個指向內存中現有位置的指針,還是分配給將這些數據「攜帶」到通知中的新內存?NSNotification userInfo Dictionary - 是複製還是隻是一個指針?

如果是後者,那就如果你想引用一個大辭典影響性能;如果是前者,我會預期字典的大小並不重要,因爲它已經在內存中。

而且在這一點上,如果之前它被添加到一個通知字典是不保留,多長時間生活?我們能否安全地假設,收到通知的收件人即使在發送通知之前沒有保留字典,也可以在收到此通知時訪問此字典?

回答

0

我認爲,提供給+ (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)userInfouserInfo對象被保留。我相信沒有任何額外的內存將被分配到userInfo

這種反對通過userInfo引用的將是活着,而通知沒有被釋放(由該通知的所有觀察員發送和procedes)。是的,你可以假設字典(或者任何你會提供的userInfo)在觀察者中是可以訪問的(當然,如果你不過度釋放它)。

Memory Management Programming Guide for Core Foundation -> Ownership Policy

實例變量和傳遞參數

的基本規則的必然結果是,當你傳遞一個對象到另一個對象(如函數參數),你應該期望如果需要維護它,接收器將獲得傳遞對象的所有權。

+0

更新,根據官方文檔的報價。 – Nekto

+0

謝謝,聽起來像這將適用於'對象'參數以及'userInfo' – johnbakers

相關問題