OC是C语言的一个扩展集,几乎OS X或IOS平台上的所有应用程序都是该语言开发的。
可以使用工具包Cocoa(针对OS X系统)和Cocoa Touch(针对IOS系统)来开发功能完备的Objective-C项目.
Xcode是苹果提供的用来创建IOS和OS X应用程序的开发环境
点击window菜单下的Welcome to Xcode选项或使用Command+Shift+l快捷键就可以看到最近编辑过的项目
File->New->New Project,选择Mac OS X->Application,右边选择Command Line Tool,最后选择命令行工具类型为Foundation。 创建一个项目。
点击Run按钮或者快捷键Command+R,生成并运行程序。使用View->Debug Area->Activate Console或者快捷键Command+Shift+C,打开Xcode控制台窗口,显示输出结果。
main.m 就是包含了OC程序代码的源文件。
#import <Foundation/Foundation.h> int main(int argc, const char* argv[]) { NSLog(@"HELLO Objectibe-C!"); return (0);
} //main
8. .m代表message,OC的一个主要特性。
9. import引入框架Foundation中的Foundation.h头文件
10. 框架是一种把头文件、库、图片、声音等内容聚集在一个独立单元中的集合体。
11. Cocoa、Carbon、QuickTime和OpenGL等作为框架集,Cocoa的组成部分有:Foundation、Application Kit(AppKit)框架,支持型框架Core Animation和Core Image。
12. 每个框架都有一个主头文件,它包含了框架内所有的头文件。通过在主头文件中使用#import,就可以访问框架内的所有功能。
13. Xcode使用预编译头文件的方法来加快读取速度,通过#import导入这种文件时,加载速度会非常快。
14./System/Library/Frameworks/Foundation.framework/Headers/包含了Foundation框架的头文件
15. NSString字符串,不过字符串一般使用字符串指针NSString. NSLog输出时,第一个参数必须带有@
16. BOOL占有8位,用YES和NO两个值。 8位数*******0表示BOOL时为0, 8位数*******1对应BOOL时为1
17. OOP(Object-Oriented Programming)面向对象编程
18. 间接(indirection),让其他人代替自己做某件事,或者让他人代替自己去完成工作
19. 命令行参数(启动参数)的输入,如果使用Xcode编辑程序,运行时,Product->Edit Scheme,Arguments,点击Arguments Passed On Launch标题下的加号按钮,然后输入启动参数,OK。
20. 在OC中,方括号[],用于通知某个对象该去做什么。方括号里的第一项是对象,其余部分是需要对象执行的操作。
21. 在OC中,通知对象执行某种操作称为发送消息(也称为“调用方法”),[shape draw]表示向shape对象发送draw消息。
id shape = shapes[i];
[shape draw];
22. 类(class) 是一种表示对象类型的结构体
23. 对象(object) 是一种包含值和指向其类的隐藏指针的结构体
24. 实例(instance) 是“对象”的另一种称呼
25. 消息(message) 是对象可以执行的操作
26. 方法(method) 是为响应消息而运行的代码
27. 方法调度(method dispatcher) 是OC使用的一种机制
28. 接口(interface) 是类为对象提供的特性描述
29. 实现(implementation) 是使接口能正常工作的代码
//接口,就是C++中的类
//实现,就是C++中类方法的实现
@interface Circle : NSObject
{
@private
ShapeColor fillColor;
ShapeRect bounds;
}
- (void) setFillColor : (ShapeColor) fillColor;
- (void) setBounds : (ShapeRect) bounds;
- (void) draw;
@end //Circle
注释:声明了一个类Circle, 父类是NSObject,它有数据成员fillColor和bounds,成员方法setFillColor、setBounds、draw, setFillColor的返回值为void并且有一个ShapeColor类型的参数fillColor,@end表示类Circle声明结束
30. @interface用于定义类的公共接口。 通常,接口被称为API(Application programming interface)
31. 类的实现
@implementation Circle
- (void) setFillColor : (ShapeColor) c
{
fillColor = c;
} //setFillColor
- (void) setBounds : (ShapeRect) b
{
bounds = b;
} //setBounds
注释:@implementation是一个编译器指令,表明你将为某个类提供代码。接下来的是各个方法的定义。 可以定义一些在声明中没有出现过的方法,可以把它们看做是仅能在当前类实现中使用的私有方法。 但是,OC中不存在真正的私有方法,也无法吧某个方法标识为私有方法,从而禁止其他代码调用它。 这个OC动态本质的副作用。
32. OC运行时是指用户运行应用程序时,支持这些应用程序的代码块。
33. 创建对象的过程,叫做实例化(instantiation)
34. 实例化对象时,需要分配内存,然后将这些内存初始化并保存为有用的默认值,这些值不同于通过新分配的内存获得的随机值。 内存分配和初始化工作完成之后,就意味着新的对象实例已经创建好了。
35. OC的一个特性,可以把类当成对象来发送消息。
36. 为了创建一个新的对象,需要向相应的类发送发送new消息。该类接收并处理完new消息后,我们就会得到一个可以使用的新对象实例。
int main(int argc, const char* argv[])
{
id shape[3];
ShapeRect rect0 = {0, 0, 10, 30};
shapes[0] = [Circle new];
[shapes[0] setBounds:rect0];
[shapes[0] setFillColor:kRedColor];
...
drawShapes (shapes, 3);
return (0);
} //main
面向对象大师Bertrand Meyer的开放/关闭原则(Open/Closed Principle),即软件实体应该对扩展开放,而对修改关闭。