effective objective-c 2.0 笔记 第一章 :熟悉Objective-C

来源:互联网 发布:国家基础地理数据下载 编辑:程序博客网 时间:2024/05/10 11:22

目录结构:

1.了解objective-c的起源

2.在类的头文件中尽量少引用其他头文件

3.多用字面量语法,少用与之等价的方法

4. 多用类型常量,少用#define预处理指令

5.用枚举表示状态,选项,状态码。


objective-c的重要工作由运行期组件而非编译器完成。本质上是一种与开发者所编代码相链接的动态库。

分配在堆中的内存需要直接管理,分配在栈中的则会在其栈帧弹出时自动清除。

objective-c将堆内存管理抽象出来,不需要malloc,free来分配,释放内存,而是抽象为一套内存管理架构,叫引用计数。


采用向前申明,是引用更加优雅。在A类的头文件使用B类型的属性,可以在头文件里加@class B;在实现文件里添加B类型头文件。#import "B.h";

这样可以减少A类的使用者引用头文件的数量,进而减少编译时间。另一方又可以解决头文件循环引用问题,比如这时B类又存在使用A类型的属性,需要引用A类的头文件。相互间循环引用头文件,导致编译出错。

向前申明的局限性:使用超类需要引用超类的头文件。遵从某个协议,需要有完整定义,不能使用向前申明。

某些协议不用单独写头文件,如委托协议,最好在类的实现文件申明实现了该协议。并把实现代码放在"class-continuation"分类里。这样就不需要讲其放在公共头文件里。


使用字面量语法可以缩减源代码长度,增加可读性。NSNumber @1 ; NSArray @[@"a",@"b"]; NSDictionary @{@"a":@"key1",@"b":@"key2"};

可变数组跟字典,可以分别使用下标法和访问键的方法找到对应的元素,如mutablearray[1];mutabledictionary[@"key"];

字面量语法限制,除字符串外,所创建的对象必须属于Foundation框架才行。


宏定义常量无法指定类型信息,可能导致所有这类定义的宏一律换成了一样的信息,可能需要的是不同类型的值。

 如#define ANIMATION_DURATION 0.3,与static const NSTimeInterval kAnimationDuration = 0.3; (static 和const 必须同时使用.这样编译器不会创建符号,而是会像define一样,把遇到的变量替换成常量 )

常量命名法:常量局限在编译单元内,以k开头如kAnimationDuration.若常量在类之外可见,以类名开头,如EOCViewClassAnimationDuration.

如果需要外部可见,需要定义成extern NSString *const EOCStringConstant(头文件);NSString *const EOCStringConstant = @"value";(实现文件)。会放在全局符号表中。


枚举类型指定底层数据类型:

enum EOCConnectType:NSInteger{ /**/};

新的用法:typedef NS_ENUM(NSInteger,EOCConnectType){/**/}




0 0