一、蘋果公司將Cocoa、Carbon、QuickTime和OpenGL等技術做爲框架集;
提供Cocoa組成部分有:
(1)Foundation框架(有不少有用的,面向數據的低級類和數據結構);
(2)Application Kit(也稱AppKit)框架(包含了全部的用戶接口對象和高級類,例如NS……),
還有一個支持框架的套件,包括Core Animation和Core Image。shell
NS前綴
在IOS開發中,常常會遇到NS開頭的對象,這個要從喬幫主歷史恩怨提及。
當年Steve Jobs 和John Scullery與恩怨,喬幫主當年被人擠兌出蘋果,自立門戶的時候作了個公司叫作NextStep,
裏面這一整套開發包非常讓一些科學家們喜歡,而如今Mac OS用的就是NextStep這一套函數庫。 數據結構
二、NSLog() 至關於 print()
NSLog(@"hello Object-c");
//注:@是Objective-C在標準C語言基礎上添加的特徵之一,雙引號的字符串前面有一個@,
這表示引用的字符串應該做爲Cocoa的NSString元素處理
NSLog(@"are %d and %d different? %@",5,5,boolString(areTheyDifferent));
/注意%@:使用NSLog輸出任何對象值時,都會使用這個格式說明 框架
三、BOOL使用8位存儲,YES定義爲1,NO定義爲0,大於1不爲YES,跟標準C不一樣。
若不當心將一個長於1字節的整型值賦給BOOL,則只截取低八位
Obejective-C中1不等於1,絕對不要將BOOL值和YES比較iphone
四、Object-C語法結構:函數
在Objective-C裏面沒有public和private的概念,你能夠認爲全是public;
它只有類方法和實例方法,加號(+)表示類方法,類方法能夠直接調用,而不用建立這個類的實例;
減號(-)表示實例方法,須要建立這個類的實例對象才能夠調用。
如:(Object-C)
-(void)hello:(BOOL)ishello
{
//XXOO
}
(C#/Java)
private void Hello(bool ishello)
{
//XXOO
}ui
如何調用剛纔寫的方法(Object-C中說消息)
(Object-C)
[self hello:Yes];
(C#)
this.hello(true);this
五、比較常見的函數庫:
NSLog、NSString、NSInteger、NSURL、NSImageatom
還能夠看到其餘名字打頭的一些類,好比CF、CA、CG、UI等等
CF說的是Core Foundation,CA說的是Core Animation,CG說的是Core Graphics,UI說的是iPhone的User Interface設計
六、Object-C常見語法說明:
1 頭文件引用使用 #import 「文件名」或者 #import <文件名>的形式以確保每一個頭文件僅被包含一次;
2 類聲明以 @interface 類名:繼承類 開頭,以 @end 結尾,類實現以@implementation 類名 開頭,以 @end 結尾;
3 實例方法,即成員方法,在方法名前面添加一個減號(-);類方法,在方法名前面添加一個加號(+);
4 類方法的調用格式爲 [類名 類方法],成員方法調用格式爲 [實例名 實例方 法],這種模式在ObjC中被稱爲消息機制,
[對象 消息]即給對象發送了一個消息,產生的 效果就是該對象調用了該類中定義的對應的實例方法;
如:(Object-C)
Print類.h文件(聲明文件)
++++++++++++++++++++++++++++++
#import <Foundation/Foundation.h>
@interface Print:NSObject{//Object-C的全部類都繼承於NSObject
//成員屬性
NSString *caption;
NSString *photographer;
}
//在Object-C2.0引入了屬性合成,至關於C#中的get/set方法
@property(nonatomic,copy)NSString *caption;
@property(nonatomic,copy)NSString *photographer;
//類方法
+(NSString*)printName;
@end
Print類.m文件(實現文件)
++++++++++++++++++++++++++++++
@implementation Print
@synthesize photographer;
@synthesize caption;
//類方法
+(NSString*)printName
{
return (@"Print Result");
}
@end
Print類使用
++++++++++++++++++++++++++++++
#import 'Print.h'
int main(int argc,const char *argv[])
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];
return NSApplicationMain(argc,(const char**)argv);
//類方法的調用
NSLog(@"ClassName=/"%@/"",[Print printName]);
//初始化
Print* p=[[Print alloc]init];
//設置器調用
[p setCaption:@"MyCaption"];
[p setPhotographer:@"MyPhotographer]"];
[pool drain];
return 0;
}
運行結果:
2015-05-2 11:12:13.715 demo[1471:903] ClassName = "Print Result" 指針
2015-05-2 11:12:13.718 demo[1471:903] Caption = "MyCaption"
2015-05-2 11:12:13.718 demo[1471:903] Photographer = "MyPhotographer
PS:
蘋果公司的iphone平臺採用Objective-C作爲native language的開發,Objective-C的內核是C語言的,
並基於C語言實現OOP的一些特性。Objective-C是對C語言的擴展,這和C++的前身Better-c有很大的類似之處,
Objective-C的新版本里實現了和Java相似的垃圾回收機制,但基於iphone平臺的資源限制,
iphone平臺並不支持垃圾回收機制。
總結: 一、Object-C方法調用(Calling Methods): [object method]; [object methodWithinput:input]; 二、對象方法的返回值 output=[object methodWithOutput]; output=[object methodWithinputAndOutput:input]; 三、建立對象 id myObject=[NSString string]; //id指的是任意類型,爲指針。這裏便可: NSString* myString=[NSString string]; //全部的Object-對象變量都是指針類型 四、嵌套消息調用(Nested Messages) 如:function1(function2()); (Object-C) [NSString stringWithFormat:[prefs format]]; //避免一行代碼裏嵌套調用超過兩個 五、多參數輸入的方法(Multi-Input Methods) 定義一個多輸入參數的方法: -(BOOL)writeToFile:(NSString*)path atomically:(BOOL)userAuciliaryFile; 調用該方法: BOOL result=[myData writeToFile:@"tmp/log.txt" atomically:NO]; //參數不必定要給它命名,在運行期,系統的這個方法的真實名字叫writeToFile:atomically: 六、Accessors(Getter&Setter)--訪問器 //在Objective-C裏面全部的實例對象默認都是私有的。 //全部在大多數狀況下咱們須要用accessors去讀取或者設置變量的值。 //設置對象變量的值有如下兩種方式: [photo setCaption:@"Day at the Beach"]; output =[photo caption];//該代碼並不是直接去讀對象實例的變量,實際上它調用的是名爲caption的方法。 方括號:都是向一個對象或者一個類發送一個消息 七、Dot Syntax (.語法) //在Object-c2.0裏,新增了一個"."操做,在Mac OS X 10.5裏使用了Object-C2.0語法 photo.caption=@"Day at the Beach"; output=photo.caption; //注:這兩種方式均可以使用,但在一個工程裏最好保持風格一致,只使用某一種。 八、建立對象 主要有兩種方式建立對象 第一種:NSString* myString=[NSString string]; //注:習慣的風格,在這種狀況下,咱們建立的是系統自動釋放的(autoreleased)類型的對象。 第二種:NSString* myString=[[NSString alloc]init]; //注:這是嵌套的方法調用。第一個調用的NSString的本身的alloc方法。 //較爲底層的調用,建立了內容、以及實例化了一個對象。 //咱們在這裏能夠用不一樣的初始化方式去賦初值 NSNumber* value=[[NSNumber alloc]initWithFloat:1.0]; 九、基本內存管理 //假如咱們正在爲Mac OS X開發一個應用程序,咱們能夠選擇是否啓用垃圾回收機制。 //這就意味着咱們不須要去考慮內存管理,除了一個特別複雜的情形咱們須要處理一下。 //然而,咱們有的時候咱們的開發環境沒有垃圾回收機制,好比iPhone開發的時候就沒有垃圾回收機制。 //在這種狀況下,咱們就須要瞭解一些基本的內存管理方面的概念。 //假如咱們手動的經過alloc建立了一個對象,咱們須要用完這個對象後release它。 //咱們不須要手動的去release一個autoreleased類型的對象,假如真的這樣去作的話,咱們的應用程序將會crash。 //string1 will be released automatically NSString* string1 =[NSString string]; //must release this when done NSString* string2=[[NSString alloc]init]; [string2 release]; //如今暫且認爲凡是autoreleased的對象在調用完成後就會被釋放,之後還需進一步的完善 十、設計類 //對於Object-C語言而言,建立一個類很是簡單,它分爲兩個部分 //類的接口一般保存在ClassName.h文件裏,它定義了實例的參數,以及一些公開的方法。 //類的實如今ClassName.m文件裏。它包含了真正運行的代碼和那些方法。 //它還常常定義一些私有的方法。這些私有的方法對於子類是不可見的。 如:有個類名爲Photo的接口文件:Photo.h 代碼以下: #import @interface Photo:NSObject{//聲明Photo類,繼承自NSObject類 //定義成員變量,這裏是NSStrig*類型,也能夠爲任意類型id類型 NSString* caption; NSString* photographer; } //增長方法,Object-C方法不須要加get前綴。 //Getters,返回類型爲NSString*類型 -(NSString*) caption; -(NSString*) photographer; //Setters,返回類型指定爲void類型 -(void)setCaption:(NSString*)input; -(void)setPhotographer:(NSString*)input; @end Photo類的實現,代碼以下: #import "Photo.h" //getters 實現 @implementation Photo -(NSString*)caption{ return caption; } -(NSString*)photographer{ return photographer; } //setters -(void) setCaption:(NSString*)input{ [caption autorelease]; caption=[input retain]; } -(void) setPhotographer:(NSString*)input{ [photographer autorelease]; caption=[input retain]; } //在支持垃圾回收的環境裏,咱們能夠直接賦值就能夠了 //如: //-(void) setCaption:(NSString*)input{ // caption=input; //} @end