第一章 启航
第二章 对c的扩展
2.1 最简单的objective-c程序
2.2 解构Hello objective-c 程序
1. xcode通过.m扩展名来表示文件使用的是objective-c代码,应由objective-c编译器处理 2. #import可保证头文件只被包含一次,无论此命令在该文件中出现多少次 3. #import<Foundation/Foundation.h>语句告诉编译器查找Foundation框架的Foundation.h头文件 4. @符号意味着引号内的字符串应作为cocoa的NSString元素处理 5. NSArray:存放数组 NSDateFormatter:帮助你用不同的方式设置时间格式 NSThread:提供多线程编程工具 NSSpeechSynthesizer:能让你听到声音2.3 布尔类型
1. objective-c的BOOL类型,只有YES和NO两个值 2. 使用NSLog()输出任意对象的值,都使用的是%@格式来表示 如:NSLog(@“%@”,boolstring(areTheyDifferent));第三章 面向对象编程的基础知识
3.1 间接
1.间接可以理解为让其他人代替自己做某件事
2.Count一般为循环变量名
如:int WordCount = 4;
for(int i = 0 ; i < WordCount ; i++)
{}
3.2 在面向对象编程中使用间接
1. id是一种泛型,可以用来引用任何类型的对象
id表示标识符(identifier)
2. [ shape draw ];
shape是绘制外观,draw是执行动作
objective-c中的方括号用于通知没课对象该去做什么,方括号里的第一项是对象,其余部分是需要对象执行的操作
3. objective-c中,通知对象执行某种操作称为发送信息(调用方法)
[shape draw]理解为“向shape发送draw消息”
3.3有关术语
3.4 objective-c语言中的oop
1.以下是Circle类的接口@interface Circle : NSObject //Circle类是基于NSObject类的
{
@private
ShapeColor fillColor;
ShapeRect bounds;
}
/*下面是方法声明*/
- (void) setFillColor : (ShapeColor) fillColor;
- (void) setBounds : (ShapeRect) bounds;
- (void) draw;
@end //Circle
说明: (1)@interface Circle :NSObject //Circle类是基于NSObject类的 (2)- (void) setFillColor : (ShapeColor) fillColor; - (void) setBounds : (ShapeRect) bounds; 其中每个方法都有一个参数。 setFillColor:有一个颜色参数,Circle类在绘制自身时会使用该颜色。 setBounds:有一个矩形区域参数,Circle类使用该区域来确定它们的边界。 2. objective-c的中缀符: 你可以这样调用带一个参数的方法 [Circle setFillColor : KRedColor]; 3. 真正使对象能够运行的代码位于@implementation中 4. @implementation后市各个方法的定义。不必按照在@interface指令中的顺序出现。可以在@implementation中定义那些在@interface中没有声明过的方法 5.
/*以下是Triangle类接口声明*/
@interface Triangle : NSObject
{
ShapeColor fillColor;
}
- (void) setFillColor : (ShapeColor) fillColor;
@end //Triangle
/*以下是Triangle实现部分*/
@implementation Triangle
- (void) setFillColor : (ShapeColor) c
{
fillColor = c;
} //setFillColor
@end //Triangle
第四章 继承
4.1 为何适用继承
1.没有继承的 Shape-object 架构2.有继承后改进的Shape-objective 架构
3.直接更改由继承得到的实例变量的值是一种不好的习惯。一定要通过方法或 property 属性来更改
4.2 继承的语法格式
1. @interface Circle:Shape //Circle是子类,Shape是父类@end //Circle4.3 继承的工作机制
1.代码发送消息时,objective-c的方法调度机制将在当前类中搜索相应的方法。如果找不到,在该对象的超类中查找4.4 重写方法
第五章 复合
5.1 什么是复合
1.软件开发中,程序员可用一个Pedal(脚踏板)对象和一个Tire(轮胎)对象组合出虚拟的Unicycle(独轮车)2.在objective-c中,复合是通过包含作为实例变量的对象指针实现的。3.Pedal和Tire通过复合组合成了Unicycle@interface Unicycle : NSObject
{
Pedal *pedal;
Tire *tire;
}
@end //Unicycle
5.2 自定义NSLog()
1.在 init 方法中,下面代码有些奇怪if(self = [super init]){}(1) 为了让超类将所有要初始化的工作一次性完成,需要调用[super init]。init方法返回的值就是被初始化的对象 (2) 将[super init]返回的结果赋给self 是objective-c的惯例。为了防止超类在初始化过程中返回的对象与一开始创建的不一样5.3 存取方法
1. setter 方法根据它所更改的属性的名称来命名,并加上前缀set,如setEngine2. getter 方法以返回属性名称命名,如engine5.4 扩展CarParts程序
5.5 复合还是继承
1. 继承的类之间建立的关系为“is a”(是一个)。如:三角形是一个形状,三角形继承自形状。2. 复合之间的关系为“has a”(有一个)如:形状有一个填充颜色,汽车有一个发动机和四个轮胎第六章源文件组织
6.1 拆分接口和实现
1. objective-c 源代码分两部分 (1)接口,用来展示类的结构 @interface 部分编译 (2)实现 @implementation 部分告诉编译器如何让该类工作6.2 拆分Car程序
1. 导入头文件有两种方法,引号或尖括号如:#import<Cocoa/Cocoa.h> 和 #import"Tire.h"2. 尖括号,用于导入系统头文件,只读。引号,说明导入项目本地头文件,可编辑。6.3 使用跨文件依赖关系
1. @class创建了一个前向引用告诉编译器:“相信我。以后你自然会知道这个类到底是什么,但是现在,你知道这些足矣。”2. 循环依赖关系,@class 很有用。即A类使用B类。如果用#import 让两个类互相引用,会报错。但在A.h 中用@class B,在B.h 中使用@class A,那么这两个类可互相引用。第七章 深入了解Xcode
7.1 窗口布局一览
7.2 改变公司名称
7.3 使用编辑器的技巧
7.4 在Xcode的帮助下编写代码
1. Command + [ 键 和 Command + ]键可将选定的代码左移和右移 2. Command + Control + S ,Xcode会记住项目当前的状态。可用File ---Restore Snapshot 找回之前项目3. Xcode 的查找、替换功能 Command + shift +F 4. command + shift + D 执行Open Quickly命令 5. 按住option键 + 双击代码会显示该代码的帮助文档
7.5 调试
7.6 备忘表
按键 | 描述 |
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 | 跳出 |
第八章 Foundation Kit 介绍
8.1 稳固的Foundation
8.2 使用项目样本代码
8.3 一些有用的数据类型
1. 范围(1)第一个结构体式NSRangetypedef struct _NSRange
{
unsignedint location; //存放该范围的起始位置
unsignedint length; //该范围内元素的个数
};
(2)创建NSRange有三种方式
第一种,直接给字段赋值
NSRange range;
range.location = 17;
range.length = 4;
第二种,c语言聚合结构赋值
NSRange range = {17,4};
第三种,Cocoa提供的NSMakeRange()
NSRange range = NSMakeRange(17,4);
2.几何数据类型
(1)
struct CGPoint //存一个坐标(x,y)
{
float x;
float y;
};
创建的快捷函数:CGPointMake()
(2)
struct CGSize //存长度和宽度
{
float width;
float height;
};
创建的快捷函数:CGSizeMake() (3) struct CGRect //矩形数据类型,由坐标和大小复合 { CGPoint origin; CGSize size; }; 创建的快捷函数:CGRectMake()