- 運行過程
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之間。
函數的聲明和定義可以寫在任意地方,函數不能歸某個類所有,只屬於某個文件。
- 消息機制
給指針變量所指向的對象發送一條消息(消息名稱就是方法名),讓那個對象執行相應的方法(動態)