- 复合的实现: 通过包含作为实例变量的对象指针实现.
- 复合和继承的区别:
如果可以说" X有一个Y: 就可以用复合;
如果可以说"X是一个Y" 就可以用继承. - NSLog的%@,可以输出对象.处理时会询问参数列表中相应的对象以得到这个对象的描述.
- 存取方法
要对其他对象的属性进行操作时,绝对不能直接改变对象里面的值,应该尽量使用对象提供的存取方法,即setter和getter方法, - setter方法:需要有set前缀,可以设置属性,
- getter方法,不可有get前缀,因为get在COcoa里面意味着这个方法将传递的参数作为指针来返回数值;
- 拆分接口和实现
类都分为接口和实现两个部分,编译器将@interface部分编译后,才能使用该类的对象,. - 头文件中放的是 类的@interface指令,公共struct定义,enum常量, #defines和extern全局变量等,头文件名称和类名相同,用.h做后缀.
- 实现文件中放的是:@implementation指令,全局变量的定义,私有struct等, 实现文件名称和类名相同,用.m做后缀,
- 如果实现文件用.mm做后缀,编译器会任务是OBjectiveC++ 编写的.
- 一个类都是由.h和.m文件组成的, .m文件第一行需要导入头文件,如
#import "Tire.h"
, 忘记导入头文件会报错Cannot find interface declaration for Tire
(无法找到接口定义)之类的错误信息.
导入头文件的两种方法,引号和尖括号,尖括号的#import表示 导入的是系统头文件, 它属于系统,是只读的;引号的#import表示导入的是项目本地的文件, 是可以编辑的.
依赖关系 - 头文件和实现文件之间有依赖关系,头文件的改变,会导致依赖它的文件都需要重写编译,为了减少由依赖关系引起的重新编译带来的负面影响, OC引入了@class解决这个问题.
- @class: 它可以告诉编译器,这是一个类,我只会通过指针引用它,不必知道关于这个类的更多信息, 只要了解它是通过指针引用的即可.
如
#import <Foundation/Foundation.h>
@class Tire;
@class Engine;
- @class创建了一个前向引用,可以告诉编译器,现在只知道是通过指针引用的即可;
- 复合的时候可以用@class;
- 继承的时候 不能用@class, 因为继承不是通过指向其他类的,编译器需要先知道所有关于超类的信息才能成功地为子类编译@interface部分;
Xcode常用技巧
- 导航器面板底部的搜索框,快速找到文件;
- 编写代码相关的
- 首行缩进:Xcode-Preference-Text Editing- Indentation
- 代码自动完成: 比如输入方法名的时候,会自动出现两个占位符,输入第一个后,直接tab就可以将光标移到下一个占位符;
- 括号配对: 括号不匹配时会发出警报, 另一个是双击分隔符后,Xcode会选定它以及与它匹配的括号之间的全部代码;
- 批量编辑: 编辑之前保存快照, FIle- Create Snapchat,如果需要恢复项目,可以用FIle- Restore Snapchat进行恢复.
批量编辑可以选择在整个项目范围内进行搜索和替换,也可以在指定范围内编辑全部内容, 如: 选定一个符号,如局部变量或参数,点击它,右边出现一个向下的箭头, 点击箭头看到一个菜单,选中Edit all in Scope, 输入替换后的内容,此时修改的是变量的有效范围内全部都替换. - 代码导航:
代码的生命周期:创建- 增改-维护; 增改或维护之前必须阅读大量的文件,需要经常浏览代码,常用的方法有:
EMACS: 快捷键组合, 如光标移动到行首,control+A , 交换光标两边的字符 control + T ,等,可以更快地在小范围内移动光标并进行编辑操作. - 快速打开文件
在源文件上方看到的#import 语句, 选定文件名, 选择File- Open- Quickly,就可以快速打开, 或者快捷键Command+shift+O ,
如果没有选择文本,则会打开一个对话框,进行文件查找; - 聚焦栏,
源代码左侧较宽的是边栏,较窄的是聚焦栏,代码嵌套的 越深,则聚焦栏中的灰色也会越深,还可以点击聚焦栏来折叠相应的代码片段, --代码折叠.
Xcode常用快捷键
按键 | 描述 |
---|---|
Command+[ | 左移代码块 |
Command+] | 右移代码块 |
Tab键 | 接受代码自动完成提示 |
Esc键 | 显示代码提示菜单 |
Control +. | 循环浏览代码提示 |
Shift+Control+. | 反向循环浏览代码提示 |
Command + Control + S | 创建快照 |
Control+F | 前移光标 |
Control+B | 后移光标 |
Control+ P | 移动光标到上一行 |
Control+ N | 移动光标到下一行 |
Control+ A | 移动光标到本行行首 |
Control + E | 移动光标到本行行尾 |
Control+ T | 交换光标左右两边的字符 |
Control+ D | 删除光标右边的字符 |
Control+ K | 删除本行 |
Control+ L | 将光标置于窗口正中央 |
Command+ Shift+ O | 显示open quickly 窗口 |
Command+ Control+向上方向键 | 打开相配套的文件 |
按住option双击鼠标 | 搜索文档 |
Command+ Y | 全局激活/禁用断点,激活进入调试模式 |
Command+ Control+ Y | 继续运行( 在调试器中有效 |
F6 | 跳过 |
F7 | 跳入 |
F8 | 跳出 |
shift+command+Y | 显示控制台 |
option+command+←/→ | 折叠当前代码块,包括@interface,…@end |
shift+command+C | 激活聚焦控制台,光标定位到控制台呈可输入状态 |
command+ K | 清除控制台 |
comma+ \ | 当前行设置/取消断点 |
control+command+Y | 逐断点继续执行 |
Control+command+ C | 执行到当前光标所在行 |