解释苹果文档

时间:2014-01-08 05:11:35

标签: ios objective-c block

我正在尝试理解该方法的这两个参数,但我似乎并不理解它。 addObserverForName:object:queue:usingBlock:

我不明白方法中2个参数的描述。希望有人可以向我解释。

- (id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *))block

我不明白这两行:

  

命名   要注册观察员的通知的名称;也就是说,仅使用具有此名称的通知将块添加到操作队列。   如果您传递nil,则通知中心不会使用通知的名称来决定是否将该块添加到操作队列。

当通知中心不使用通知名称来决定是否在填充时将块添加到操作队列时,这意味着什么。 另外,我应该输入什么通知名称。我不知道。 和

  

OBJ   要将其块添加到操作队列的通知的对象。   如果您传递nil,通知中心不会使用通知的发件人来决定是否将该块添加到操作队列。

我应该在这个参数中插入什么对象。

2 个答案:

答案 0 :(得分:2)

nil name和valid object - 来自该对象的所有通知都将传递给块。

有效名称和nil对象,任何对象对该名称的所有通知都将传递给该块。

有效名称和有效对象 - 该对象对该名称的通知将传递给该块。

通知的名称取决于您要观察的通知,我们无法告诉您在问题描述中使用什么。

答案 1 :(得分:1)

name参数描述的文档听起来像是从对象的描述中复制粘贴。

通知使用字符串通知名称发送:

[[NSNotificationCenter defaultCenter] postNotificationName: @"somethingHappened" 
  object: self];

通常,但并非总是如此,帖子通知调用中的“对象”是发布通知的对象。它也可能是通知的对象:

[[NSNotificationCenter defaultCenter] postNotificationName: @"aHouseCaughtFire" 
  object: theHouseThatCaughtFire];

该帖子通知调用发送一条消息(例如“aHouseCaughtFire”),而object参数告诉该事件与哪个对象相关联。

当您注册通知时,您可以说您关心特定的通知字符串(名称),特定对象或两者。正如另一张海报所说,如果您传入一个零通知名称和一个非零对象,您将收到有关使用您指定的对象参数发送的所有通知的通知。

如果您要去度假,您可能需要注册有关您房屋的所有通知。 (notification = nil,object =你的房子。)

因此,您将获得有关您房屋的“aHouseCaughtFire”通知,“aHouseWasRobbed”通知和“aHouseGotaAPackage”通知,但不会收到有关其他房屋的通知。

如果您是消防部门,您可能希望注册所有“aHouseCaughtFire”通知,无论它是哪个房屋。然后通知处理程序将查找特定房屋的地址,并派遣一辆消防车。