```
//--------------------------oc語言的歷史
//------------------------import和include的區別;
import可以防止頭文件的重複包含
include不能防止頭文件重複包含
以前在C語言中,#include關於重複包含問題
使用條件編譯指令可以防止頭文件的重複包含
#ifndef C7________xxx_h
#define C7________xxx_h
#endif
foundation.h引入了,等於把OC的庫文件都引入過來了
類庫地址: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/
1)#import <Foundation/Foundation.h>, 告訴編譯器找到並處理名爲Foundation.h文件,這是一 個系統文件,#import表示將該文件的信息導入到程序中。
在C和C++中採用#include指令,在本例中也可以採用#include,而#import是#include改進指令,它
#可以防止頭文件重複包含問題。
2)int main(int argc, const char * argv[]),這個方法是程序的入口。參數argc-參數數目,argv-參數值。
3)@autoreleasepool{ }這是一個自動釋放池,用於回收對象的存儲空間
4)NSLog是Foundation框架提供的Objective-C日誌輸出函數,與標準C中的printf函數類似,並可以格式化輸出。
@“Hello, World!”,是代表NSString字符串對象,它是Objective-C常用的字符串類。
5)最後是return 0語句,它表示要終止main的執行,一般情況下0代表正常結束,非0代表異常情況, 這是沿用了C語言的習慣。
//手動敲3遍這個main函數
#import <Foundation/Foundation.h>
int main(){
@autoreleasepool{
NSLog(@"test");
}
}
打印字符串使用%s
NSString創建的字符串 是一個對象,打印需要使用%@
//-----------------------NSLog 和printf的區別:
1,NSLog可以自動換行, 輸出調試信息, printf不能.
2,NSLog 函數的參數是一個NSString 對象
3,printf函數的參數是一個字符串常量指針
NS -- > NeXT softWare
//--------------------------@符號的含義:
1,@"" 將雙引號的C字符串轉換爲OC的字符串對象NString;
2,OC中的一個特有標示符,很多關鍵字前面都加@。
四,OC可以訪問C源文件中的函數。C不能訪問OC中的源文件中的方法。(這裏其實是向下兼容)
//---------------------------語言特點
//源文件對比:
1,C中常見的源文件有.c 和 .h ;
2,OC中常見的源文件有.h 和 .m ;
//基本語法對比:
1,數據類型對比:
首先OC兼容C中的所有數據類型;
OC新增了boolean類型、block類型、對象類型、特殊類型SEL和nil 等;
另外,C中不兼容OC中新增的類型;
//流程控制語句對比;
首先OC兼容了C中所有的流程控制語句;
OC又新增了自己的for in 增強型的循環語句;
//OC中的增強型for循環
for(NSString *str in arr){
NSLog(@"%@",str);
}
//函數和方法定義聲明的對比;
//C語言中函數的聲明和實現
i.函數聲明:
int sum(int a,int b);
ii.函數定義
int sum(int a,int b){
return a+b;
}
//OC語言中函數習慣稱之爲“方法”
i.方法聲明:
-(int)sum:(int) a and:(int) b;
ii.方法定義
-(int)sum:(int) a and:(int )b{
return a+b;
}
boolean 底層的設計是 無符號的char 取值爲 true和false
BOOL 取值 YES爲真 NO爲假
//面向對象思想
面向過程和麪向對象,都是人們在採用不同的方法來認識和描述這個世界,是認識世界的不同角度。
對象爲處理複雜性問題提供了一種新的方式。
在面向過程的眼中,世界的一切都不是孤立的,它們相互緊密聯繫在一起,缺一不可,相互影響,相互作用並形成一個個具有嚴格因果律的小系統,而更多的小系統組成了更大的系統,這些系統構成了世界運行的過程。
在面向對象看來這個世界的本質是由對象組成的,平時看上去相互無關的獨立對象在不同的驅動力和規則下體現出不同的運動過程,然而這些過程便展現出了我們這個生動的世界。
面向對象和麪向過程並不是對立的兩種方法,可以說面向對象是包含面向過程,比面向過程更加抽象的一種方法。
面向過程分析方法主要是描述一個流程,找到過程的起點,然後順藤摸瓜,分析每一個部分,直至達到過程的終點
面向對象設計三個主要特徵:
封裝,繼承,多態
//-------------------------類和對象
//什麼是類?
通俗一點講就是 將具有相同屬性和行爲的實體的向上抽象。
比如:將男人,女人,向上抽象爲一類,即爲 人;Person類;
將狗,貓,老虎等動物向上抽象爲一類,即爲動物的類;Animal類等;
//什麼是對象?
即指現實世界中各種各樣的實體。它可以指具體的事物也可以指抽象的事物。
類 --實例化---> 對象(屬性,方法)
類和對象的抽象關係:
類和對象是分不開的;
每個對象,一定有自己所屬的類;
每個類,一定有自己對應的實例;
類由對象的抽象而來;
對象由類的具體實例而來;
//-----------------------------類的成員組成及訪問
組成:
成員變量(屬性)
成員方法(行爲)
成員變量/實例變量/屬性
//類的聲明
@interface <#class name#> : <#superclass#>
{
//類的屬性
}
//類的行爲 --> 方法(聲明)
@end
//類的實現
@implementation <#class#>
<#methods#> //方法進行實現
@end
//--------------------------------對象存儲細節
當創建一個對象的時候:Person *p1 = [Person new],做了三件事情:
1.向計算機申請內存空間;
2.給實例變量初始化;
3.返回所申請空間的首地址;
//成員訪問
前提:成員變量需要用@public修飾符修飾;(先記住需要用@public修飾)
Car *car1=[Car new];
car1->lunzi = 3; // 使用->來訪問;
//方法訪問:
Car *car = [Car new];
[car run];
-(void)run; --> 對象方法 由 對象調用
[car run];
對象方法
(1)對象方法以-開頭如 -(void)xx;
(2)對象方法只能由對象來調用
(3)調用格式 [對象名 對象方法名];
+(void)fly --> 類方法 由 類調用
[Car fly];
//------------------無參數方法聲明
-(返回值)方法名;
//------------------有參數方法聲明
-(返回值)方法名1:(參數類型) 參數名;
-(返回值)方法名1:(參數類型) 參數名 and:(參數類型2) 參數名2;
舉例:
-(void)info:(NSString *)name andAge:(int)age;
注意:冒號是方法名的一部分
//實例變量書寫規範
@interface Person : NSObject
{
//類的屬性
int _age;
NSString *_name;
}
@end
“`