OC语言(三)
十九.一些规范
import系统自带的用尖括号<>来包含。
发现需求不清晰,一定要先搞明白才去做。
多文件开发,文件名和类名一致
命令行里的做法:(只是编译链接主文件,但是全部编译链接会出错)
1.每个文件都要引入主框架(如果使用了NSObject)
2.如果用到了其他类,也要引入
3.主文件要引入所有用到的类
正式的做法:(所有文件一起编译链接)
借鉴C语言的做法,写h文件来包含声明。
import不要包含源文件,容易发生重复定义错误(duplicate)。
把类的声明(@interface)放到.h文件中。
******定义一个类分为两个文件.h和.m
.h:放 成员变量 和 方法的声明(@interface)
.m:放 方法的实现(@implementation)
主文件则用来融合所有的.h
二十.XCode新建类
使用Cocoa Class创建类可以同时生成.h和.m
二十一.XCode断点调试
设置断点,在output框上测有空心向右的箭头按钮表示前进,把鼠标暂留在变量上可以查看详细信息。
单步按钮的前方是断点是否有效的按钮。
删除断点:按住断点向外拖
二十二.生成代码块
左键长按代码块直到出现箭头,然后拖入右下角代码块内
shortcut是触发条件,当检测到相应的输入就可以替换为相应的代码框
二十三.特有注释
#pragma mark xxx
可以用索引进行定位。
使用
#pragma mark - xxx 可以在方法前产生横线分隔符
特殊技巧
#pragma mark - group1
xx
xx
xx
xx
#pragma mark - group2
xx
xx
xx
xx
这样可以产生两组
二十四.多文件查看
二十五.点语法
采用的是和视图窗口内编辑一样的方法,
在View->Assistant内可以修改第二视窗的显示位置
为了兼容其他语言的点运算符。
当编译器遇到点语法,会把点语法转化成set方法
stu.age = 10;展开为:
[stu setAge : 10];
注意age并不是成员变量
p.age 是get方法,看有没有赋值。
前面的按钮可以在断点处跳入应该跳转的函数。
在get和set方法中不要再用点语法,否则会引发死循环。
点语法不是访问成员变量,而是转成set和get方法。
必须先定义set和get方法,才能使用点语法。
二十六.成员变量作用域
@private 只能在当前类的对象方法中实现
@protected 只能在当前类及其子类的对象方法中实现(在声明中什么都不写默认是@protected)
@public 任何地方都能直接访问对象的成员变量
@package 只要处在同一个框架中,就能直接访问
只要声明一次作用域,下面的都是该作用域。
在实现里面定义成员变量默认私有。不要这么写,因为包含.h时不能探测到。
因为.m不会被包含。
虽然子类不能访问父类的私有变量,但是内存中有该变量。
OC是单继承。
二十七.一些编译器特性
@property 可以自动生成某个成员变量的set和get方法声明。
例如对于
int _age这个成员变量:
@property int age;
@property后面的是对set的参数类型和get的返回值类型的说明。
会自动变成
set方法:
- (void)setAge:(int)age;
get方法:
- (int)age;
@synthesize 生成property的set和get实现。
对于上面的,用@synthesize age = _age来实现。
后面的表示真实访问的是哪个成员变量。
小技巧:类型一样的可以写在同一行。但是一般是分开写。
如果不写成员变量,@property会自动生成private成员变量。(加下划线的),会根据实现里面的=后面的来生成。
Xcode4.4以后,可以只写@property。
但是自动生成的是@private作用域。
@synthesize age;自动生成的是age成员变量而非_age,系统会自己使用self进行区分。
如果已经写了get或者set方法,Xcode会自动生成没有的,而不会覆盖已有的。
设成员变量为_xxx
则get的标准写法为:
- (类型)xxx{
return _xxx;
}
set的标准写法为:
- (void)setXxx : (类型)xxx{
_xxx = xxx;
}