Notification的工作机制
1.对应用程序中其他地方发生的事件(比如增加一条数据库记录)感兴趣的对象,会向通告中心(Notification Center,NSNotificationCenter类的实例)注册,从而成为该事件的监听者。在注册过程中,监听者需要指定方法供通告中心在事件发生时调用。
2.给数据库添加记录(或者类似事件)的对象给通告中心发一个通告(NSnotification的实例)。该通告对象包括识别通告的标志、发布通告的对象ID和可选的附加信息字典。
3.通告中心发送消息到每个已注册的监听者,调用监听者指定的方法会将通告传给这些监听者。
NSNotification对象
NSNotification包含三个属性:
name一个notification对象的name,由我们自己定义
objectpost该notification的object,也就是sender
userInfo伴随notification传递过去的数据,是一个NSDictionary
NSNotificationCenter中的方法
Getting the Notification Center
+ defaultCenter该方法用于获取当前程序中的center object
Managing Notification Observers
– addObserverForName:object:queue:usingBlock:
对快代码的操作,详见:http://blog.sina.com.cn/s/blog_63ced45101016cih.html
– addObserver:selector:name:object:
notificationObserver 一个对象,作为observer,不能为空。
notificationSelectorobserver接收到notificaiton后会调用的方法,该方法只能有一个参数,类似:- (void) mytest:(NSNotification*) notification
notificationNamenotification的name,center只会像该observer发送指定name的notification
notificationSender一个对象,作为sender,也就是说指定了只有改sender发送了name为上一个参数指定的notification,center才会向observer发送notification
– removeObserver:
notificationObserver 从center中删除observer,add方法调用后,要在合适的地方调用remove方法删除observer,否则如果多系调用add后,一个post会接收到多次notification
– removeObserver:name:object:
该方法与–addObserver:selector:name:object:结合起来使用
Posting Notifications
– postNotification:
NSNotification
– postNotificationName:object:
notificationNamenotification name
notificationSender发送notification的object
– postNotificationName:object:userInfo:
notificationNamenotification name
notificationSender发送notification的object
userInfo伴随着notification发送过去的数据,是一个NSDictionary
Android中的四大组件之一Broadcast用来在手机上发送广播,无论是同一个程序中或是在其他的应用中,只要你注册接收该条广播,那么当广播发送之后,你就会收到,这种机制可以降低程序中间的耦合性,可以通过发送广播调用其他类中的东西。
在IOS中也有类似Broadcast的机制,其中包括NSNotificationCenter和NSDistributedNotificationCenter机制。
NSNotificationCenter。在IOS运行的每一个程序都有一个default center,不要自己创建。通过方法[NSNotificationCenter defaultCenter]可以获取center对象,center实际上是notification的dispatch table(调度表),center控制着程序中所有notification的添加、删除以及post后的响应。可以说NSNotificationCenter 是专门供一个程序中的不同类间的消息通信而设置的。
NSDistributedNotificationCenter用于在不同程序之间post和receive notification,这个跟Android的Broadcast比较相似。
相关推荐
总之,iOS的基础知识中,了解和掌握NSNotification与Delegate这两种通信方式至关重要。正确地使用它们,能够帮助开发者构建出高效、灵活的代码结构,提升用户体验。在实践中不断探索和优化,你将能够更好地应对各种...
【IPhone开发进阶】是针对iOS开发领域的一门进阶教程,主要涵盖了iPhone应用程序开发的核心技术和基础知识。本文将深入探讨iPhone OS、SDK以及Objective-C 2.0的关键概念。 首先,iPhone OS是构建iPhone应用程序的...
这个BasisProduct项目不仅包含了以上这些基础知识点,还可能涵盖了一些特定的分类干货,如UI设计原则、App启动优化、国际化与本地化、单元测试等内容。通过深入学习和实践,开发者可以提升自己的iOS开发技能,为构建...
总的来说,"Object-c for iPhone" 主要涵盖的内容是使用 Objective-C 这种编程语言进行 iPhone 应用程序的开发,涉及到类、对象、消息传递等基础知识,以及如何利用 Objective-C 的特性结合苹果的开发框架(如 UIKit...
- **知识点**:使用Xcode创建iOS项目的基础流程。 - **实现方法**:通过Xcode的模板来快速搭建一个基本的应用程序框架,包括设置项目的名称、组织标识符等基本信息。 - **应用场景**:适用于初学者入门iOS开发,...
- 学习条件语句的基础知识,如何使用if语句进行逻辑判断。 - 掌握如何结合布尔表达式来构造复杂的条件判断逻辑。 - **1.9 Implementing Loops with For Statements**(使用for语句实现循环) - 学习如何使用for...
在Objective-C中,数据类型、书写规范和格式符都是基础知识。学习者需要掌握不同数据类型(如基本数据类型、指针类型等)以及如何在代码中正确使用它们。书写规范涉及代码的排版和风格,有助于维护和理解代码。格式...
了解ARC(Automatic Reference Counting)的工作原理,知道如何避免 retain cycles 是防止内存泄漏的基础。学会使用`weakSelf`和`strongSelf`来解决Block中的循环引用问题。 2. **KVC与KVO**:Key-Value Coding...
这个源码Demo是一个很好的实践平台,可以帮助开发者巩固iOS开发基础知识,理解实际项目中的常见问题和解决方案。通过深入研究和实践,你不仅可以提升iOS编程技能,也能为毕业设计或论文提供有价值的参考。
#### 一、Objective-C 内存管理基础知识 1. **alloc与dealloc的区别以及与retain、release的关系** - **alloc**: 创建一个新的对象并分配内存空间。 - **dealloc**: 释放一个对象占用的内存空间。 - **retain**...
以上就是iPhone开发中一些主要的类和协议,通过深入理解和熟练运用这些基础知识,开发者可以构建出高效、稳定、具有良好用户体验的应用程序。这份声明文件集合无疑是对iOS开发者非常有价值的参考资料。
### Cocoa Programming Developer's Handbook 关键知识点解析 #### 一、Cocoa 概述 - **定义**:Cocoa 是苹果...无论是对于初学者还是有经验的开发者来说,掌握 Cocoa 的基础知识和技术都是构建高效稳定应用的基础。
不过,为了充分利用这个库,开发者需要对Swift的基础知识有深入理解,包括但不限于:面向协议编程、UI布局、数据源和代理模式等。同时,对于可能遇到的问题,如性能优化、内存管理等,也需要有一定的处理能力。 ...
### iOS 5 Programming Cookbook 关键知识点解析 #### 标题:iOS 5 Programming ...本书覆盖了从基础知识到高级主题的广泛内容,对于想要学习iOS开发的新手和有一定经验的开发者来说都是非常有价值的参考资料。
8. **NSNotification/NSNotificationCenter**:实现不同对象间的通信,当某个事件发生时,可以通知其他对象。 9. ** gcd (Grand Central Dispatch)**:Apple提供的多线程解决方案,用于异步处理任务,提高性能。 ...
### Objective-C培训资料知识点概述 #### 一、Objective-C简介 Objective-C是一种通用、面向对象...通过对以上知识点的学习,开发者可以更加熟练地掌握Objective-C的使用方法,为iOS和macOS应用开发打下坚实的基础。