- 运行过程
1.编写OC程序:.m源文件
2.编译.m文件为.o目标文件:cc -c xxxx.m
3.链接.o文件为a.out可执行文件:cc xxxx.o -framework Foundation
4.执行a.out文件:./a.out
- #import 的功能跟#include一样,只是更好用,他避免了头文件的多次包含
- 为了能使用OC的特性, 一定要引入#import <Foundation/Foundation.h>
-
类定义// @implementation 和 @end
// 设计(定义)一个车类 // @implementation 和 @end // : NSObject :让Car这个类具备创建对象的能力(继承) @implementation Car : NSObject // 这个大括号里面只能写所有的属性 { // @public:让对象的属性可以被外面的指针访问,默认是私有的 @public int wheels; // 默认基本数据类型的初始值都是0 } // 在@end的前面,大括号{}外面写行为 // 给Car对象增加一个行为(方法) // 给对象增加一个行为,必须以减号 - 开头, 给类增加一个对象是+。 // OC方法中的小括号()只是主要扩住类型 - (void) run { // 访问车子对象内部的属性,直接用属性名就可以 NSLog(@"%i个轮子,%f时速的车子跑起来了!", wheels, speed); } + (Void) test { // 这是类方法。上面那个-号的是对象方法。 } @end
- 类调用
// 在OC中想执行一些行为,首先写个 [行为执行者 行为名称] // new这个行为执行完毕后,会返回这个对象的地址 Car *c = [Car new]; // 给c指向的车子对象的wheels属性赋值 c->wheels = 4; // 等价于 (*c).wheels = 4 // 给指针变量c指向的对象“发送”一条run消息,让这个对象执行run这个行为 [c run];
- 声明&实现
// 声明一个类 /* 1.类名 2.继承了NSObject 3.声明属性 4.声明方法(仅仅是声明,不需要实现) 5.实现和声明中的成员变量不能同名 */ @interface Book : NSObject { @public double price;// 这些属性称为对象的“成员变量” } // 声明一个方法(行为) - (void)reng; @end
// 定义(实现)一个类 /* 只用来实现@interface中声明的方法 */ @implementation Book - (void)reng { NSLog(@"%f的书被扔了!", price); }
- 多参数的声明和使用
- (void) fly { NSLog(@"i can fly, my age is %d", age); } // 一个参数对应一个冒号 // 冒号也是方法名的一部分 - (void)fly:(int)howHeight { NSLog(@"i can fly, my age is %d, my height %d", age, howHeight); } // 多个参数的情况。 withTime是方法名的一部分.times是参数名称 - (void)fly:(int)howHeight :WithTime(int)times { }
Person *p = [Person new]; [p fly]; [p fly:99]; [p fly:99 WithTime:10];
- OC对象方法和函数的区别
1. 函数属于整个文件,在文件的任意地方都能调用;对象的方法只属于这个对象,只有对象才能调用
2. 对象的方法只能声明在@infterface 和@end 之间,对象方法只能实现在@implementation 和@end之间。
函数的声明和定义可以写在任意地方,函数不能归某个类所有,只属于某个文件。
- 消息机制
给指针变量所指向的对象发送一条消息(消息名称就是方法名),让那个对象执行相应的方法(动态)