2014-07-13 33 views
0

我看到很多人,包括教科書,發送通知,爲什麼設置發件人發送爲零時NSNotification

[[NSNotificationCenter defaultCenter] postNotificationName:@"someNotification" object:nil userInfo:data]; 

爲什麼他們寧願形式,而不是下面的?

[[NSNotificationCenter defaultCenter] postNotificationName:@"someNotification" object:self userInfo:data]; 

是否指定發送方以某種負面方式影響接收方?我想象指定發件人將是最佳實踐。

+1

我會說設置sender是最佳實踐,因爲訂閱者總是可以忽略它,但是對於需要來自特定實例的通知的訂戶而言,這是必要的。 – trojanfoe

回答

1

當您將sender設置爲nil時,這意味着您正在發佈「常規」通知,並且可以代表發佈此通知的所有對象。從用戶端考慮它;當您從某個對象請求通知時,它將其範圍限定爲僅由該對象發佈的通知。如果您在訂閱時將object設置爲nil,則無論對象如何,您都將收到所有someNotification

+0

但事情是這樣的:如果我指定發件人,那麼希望指定nil的訂閱者仍然可以這樣做,而希望指定發件人的訂閱者也可以這樣做。因此,更好的設計是指定發件人。我希望有一個更深奧的理由,如時間或空間複雜度的優化。 –

+0

因爲'nil'仍然是一個對象類型,所以方法無法確認是否有對象傳遞,除非它評估它並引發異常或返回錯誤。所以在這個筆記上,歡迎來到1999年的AppKit! –

0

您可以傳遞任何對象作爲通知的對象,但慣例是該對象是「正在進行通知的事物」。如果你將nil傳遞給對象,那麼它不會損害任何東西,但obeserver不會識別當前對象。當您發佈多個通知時需要Self,在這種情況下,觀察者需要知道當前對象。

相關問題