2012年11月27日星期二

iOS开发学习笔记(二)

iOS开发学习笔记(二)
  -- 继续入门篇


  • > 开发框架
     iOS开发框架由上而下可以这样概括包括:Cooca Touch,Media,Core Services,Core OS。如下图所示:
          
     越下层内容,越偏向于系统底层服务,不同层次的内容举例如下:
Core OS
     CFNetwork、Security
Core Services
     Core Foundation、 Address Book、 System Configuration
Media
     Core Graphics、Media Player、OpenGL ES、Quartz Core
Cocoa Touch
     UIKit、AddressBook UI

     更详细内容,参见官网SDK Reference说明。
     注意:我们在开发过程中,尽量选用上层提供的类型进行封装实现所要的逻辑,完成不了才考虑更底层的框架,这也是iOS开发的普遍规则。


  • > 开发原则
   技术选择原则
     只有上层的技术框架提供不了我们所需的效果才去考虑下层框架的技术
   项目框架的构建
     遵守MVC的设计原则,尽量把数据、界面、控制这三层分清楚
   可移植性考虑
     鉴于移动平台的多样性,核心业务功能和模块尽量使用c或者c++进行开发


  • Objective-C语言
   Objective-C必须紧记的特点
所有类都以NSObject为基类
对象都以指针的形式来表示
#import代替#include
self代替this
id代替void*
nil代替NULL
BOOL类型用YES/NO代替TRUE/FALSE
不能多继承,只能单继承(只有一个父类)
不支持命名空间
不支持运算符重载
支持多态、动态识别和反射机制


  • Objective-C的类、类别、协议和委托
     * 类(Class)
     类和C++的概念是一样的,是对象的抽象,在Objective-C中明确分为接口和实现这两部分
     ** 类的声明:
     @interface 类名:父类<协议1,协议2,…>
     {
          内部变量
     }
     @property (修饰1,修饰2,…) 类名* 属性名;
     …
     +(返回类型)静态方法:参数;
     -(返回类型)动态方法:参数;
     …
     @end
   
     ** 类的实现:
     @implementation 类名
     @synthesize 属性1,属性2…
     类方法的具体实现 ...
     @end

     * 类的属性(Property)
     在类的interface内部定义:
     @property (修饰1,修饰2,…) 类名* 属性1;
     @property (修饰1,修饰2,…) 类名* 属性2;

     在类的implementation同步:
     @synthesize 属性1,属性2…

     类的属性实际上是暴露给外部使用的成员变量, 定义了一个属性实际上就定义了一个成员变量的存取方法(有getter和setter两个函数)
     例如 @property (assign, nonatomic)  NSInteger val;
     在@synthesize之后就等于实现了如下两个方法:
     - (void)setVal:(NSInteger)input;
     - (NSInteger)getVal;

     类的属性修饰符说明
          strong     强拥有属性(新编译器常用)
          weak     弱拥有属性(OS?X?v10.6和iOS?4不支持)
          copy     深拷贝
          assign     基础数值类型赋值、浅拷贝
          retain     对象引用,对赋值对象引用计数+1
          nonatomic非原子,即多线程访问时不加锁
          readwrite     可读写属性(默认的修饰, 有getter和setter)
          readonly     只读属性(没有setter函数)

          注意:
          NSString类型的类属性一般用copy修饰进行深拷贝

     
* 类别(Category)
          类别是对现有类的功能扩展和分类,类别也分为声明和实现两部分
          类别的声明:
          @interface 现有类 (类别名称)
          +(返回类型)静态方法:参数;
          -(返回类型)动态方法:参数;
          @end
          类别的实现:
          @implementation 现有类(类别名称)
          方法的具体实现
          @end
     同一个类的类别的名字必须是唯一的
     类别的方法若和现有类的方法相同则会覆盖原方法(请慎用这个特性)
     类别只能为现有类增加新的方法而无法增加新的数据成员

     *协议(protocol)
     类似C++的纯虚类,和Java的接口概念相似。协议的定义只有声明而无需实现。
     声明:
     @protocol <父协议1,父协议2,…>
     @optional  --该修饰符下面的方法可以实现也可以不实现
     方法声明
     @required     --默认修饰符,要求下面的方法必须实现
     方法声明
     @end

     *委托(delegate)
     委托即代理的意思,是指把方法的实现转交给其他遵守协议的类
     使用委托的步骤:
     1.定义协议(如@protocol MyProto…)
     2.定义委托对象,常见的定义方法有
          id<协议> 委托对象;
          NSObject<协议>* 委托对象;
     3.调用委托对象遵守的协议中的方法


  • Objective-C的动态识别和调用
     * 选择器selector的概念
     selector的类型是SEL
     定义一个选择器并赋值:
     SEL mySelector = @selector(方法名)
     调用选择器指定的方法:
     [类对象 performSelector:mySelector];
     判断某对象或类是否响应指定的选择器:
     [类对象 respondsToSelector:mySelector];
     [类名称 instanceRespondToSelector:mySelector];

     * Objective-C的动态识别和调用方法总结
          -(Class)NSClassFromString(NSString*)   
                              让指定的字符串变成已定义的类名        
          -(BOOL)isKindOf:class-object             
                              对象是否为class-object或其父类
          -(BOOL)isMemberOf:class-object             
                              判断对象是否为class-object
          -(BOOL)respondsToSelector:selector        
                              判断对象是否能响应selector指定的方法
          +(BOOL)instanceRespondToSelector:selector   
                              判断指定的类实例是否能响应selector
          +(BOOL)isSubclassOfClass:class-object        
                              判断对象是否是指定类的子类
          -(id)performSelector:selector             
                              调用用selector指定的方法
          +(BOOL)comformsToProtocol:protocol        
                              判断一个类是否遵守指定的协议

  • > 开发中常见的前缀
     NS-     NextSTEP
     CF-     Core Foundation
     CG-     Core Graphics
     CA-     Core Animation
     UI-     User Interface
     IB-     Interface Builder



  • > 网络资料
     在学习iOS开发过程中,寻找问题过程中,或多或少收藏了一些博文。在此同样分享一下:

(完)

没有评论:

发表评论