日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

object-c 入门基础篇

發布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 object-c 入门基础篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 一、Objective-C與C的淵源?

????? Objective-C誕生于 20 世紀 80 年代,由Brad Cox 發明,意在將流行的、可移植的 C 語言與優雅的 Smalltalk 語言結合在一起。Objective-C 是 C 語言的一個擴展集,它以 C 語言為基礎,在語言中添加了一些微妙但意義重大的特性。?

????? 蘋果公司的iphone平臺采用Objective-C做為native language的開發,Objective-C的內核是C語言的,并基于C語言實現OOP的一些特性。Objective-C是對C語言的擴展,這和C++的前身Better-c有很大的相似之處,Objective-C的新版本里實現了和Java類似的垃圾回收機制,但基于iphone平臺的資源限制,iphone平臺并不支持垃圾回收機制。?

二、初識Objective-C?

????? 1、Cocoa的組成?

????? 蘋果公司將Cocoa、Carbon、QuickTime和OpenGL等技術作為框架集提供Cocoa組成部分有:(1)Foundation框架(有很多有用的,面向數據的低級類和數據結構);(2)Application Kit(也稱AppKit)框架(包含了所有的用戶接口對象和高級類,例如NS……),還有一個支持框架的套件,包括Core Animation和Core Image。?

???? 2、NSLog相當于printf()?

???? NSLog(@"hello Objective-C");?

??? //注:@是Objective-C在標準C語言基礎上添加的特征之一,雙引號的字符串前面有一個@,這表示引用的字符串應該作為Cocoa的NSString元素處理?

??? NSLog(@"are %d and %d different? %@",5,5,boolString(areTheyDifferent));?

??? //注意%@:使用NSLog輸出任何對象值時,都會使用這個格式說明?

??? 3、BOOL使用8位存儲,YES定義為1,NO定義為0,大于1不為YES,跟標準C不同。?

??? 若不小心將一個長于1字節的整型值賦給BOOL,則只截取低八位?

??? Obejective-C中1不等于1,絕對不要將BOOL值和YES比較?



三、怪異的Objective-C語法結構?

?? 我這里之所以說它的怪異,是相對于習慣其它編程語言(JAVA,C++等語言),下面把它最常見的特色簡單說明:?

?? 1、減號(或者加號)?

?? 我們每天都會在IOS開發中見到在方法名前“+”或“─”號,那么這些是什么,怎么這么奇怪??

首先要把以前學習面向對象語言的慣性思維拋去,在Objective-C里面沒有public和private的概念,你可以認為全是public;它只有類方法和實例方法,加號表示類方法,類方法可以直接調用,而不用創建這個類的實例;減號表示實例方法,需要創建這個類的實例對象才可以調用。?


比如c#/java中,一個方法的寫法可能是:?

private void hello(bool ishello)?

{?

//OOXX?

}?



用Objective-C寫出來就是?

-(void) hello:(BOOL)ishello?

{?

//OOXX?

}?

??? 有過編程經驗的人,理解這些應該不難!?
??? 2、中括號?

??? 中括號可以認為是如何調用你剛才寫的這個方法,通常在Objective-C里說“消息”。?

比如C#里你可以這么寫:?

this.hello(true);?

在Objective-C里,就要寫成:?

[self hello:YES];?

?? 3、NS****?

?? 在IOS開發中,經常會遇到NS開頭的對象,這個要從喬幫主歷史恩怨說起。當年Steve Jobs 和John Scullery與恩怨,喬幫主當年被人擠兌出蘋果,自立門戶的時候做了個公司叫做NextStep,里面這一整套開發包很是讓一些科學家們喜歡,而現在Mac OS用的就是NextStep這一套函數庫。?

?? 這些開發NextStep的人們比較自戀地把函數庫里面所有的類都用NextStep的縮寫打頭命名,也就是NS****了。比較常見的比如:?

NSLog?

NSString?

NSInteger?

NSURL?

NSImage?

…?

?? 你會經常看到一些教學里面會用到:?

NSLog (@"%d",myInt);?

?? 這句話主要是在console里面跟蹤使用,你會在console里面看到myInt的值(在XCode里面運行的時候打開dbg窗口即可看到)。?

你還可以看到其他名字打頭的一些類,比如CF、CA、CG、UI等等,比如?

CFStringTokenizer 這是個分詞的東東?

CALayer 這表示Core Animation的層?

CGPoint 這表示一個點?

UIImage 這表示iPhone里面的圖片?

CF說的是Core Foundation,CA說的是Core Animation,CG說的是Core Graphics,UI說的是iPhone的User Interface……還有很多別的,等你自己去發掘了。?

四、Objective-C常見語法說明?

?? 1 頭文件引用使用 #import “文件名”或者 #import <文件名>的形式以確保每個頭文件僅被包含一次;?

?? 2 類聲明以 @interface 類名:繼承類 開頭,以 @end 結尾,類實現以@implementation 類名 開頭,以 @end 結尾;?

?? 3 實例方法,即成員方法,在方法名前面添加一個減號(-);類方法,在方法名前面添加一個加號(+);?

?? 4 類方法的調用格式為 [類名 類方法],成員方法調用格式為 [實例名 實例方 法],這種模式在ObjC中被稱為消息機制,[對象 消息]即給對象發送了一個消息,產生的 效果就是該對象調用了該類中定義的對應的實例方法;?

?? 5 下面以一個簡單的例子來說明上述語法:?

Print類.h文件(聲明文件)?

#import <Foundation/Found
@interface Print : NSObject { //Objective-c的所有類都繼承于NSObject?

??? // 成員屬性?

??? NSString *caption;?

??? NSString *photographer;?

}?

//在Objective-C 2.0引入了屬性合成,相當于之前的get/set方法?

@property (nonatomic, copy) NSString *caption;?

@property (nonatomic, copy) NSString *photographer;?



// 類方法?

+ (NSString*)printName;?

@end?

Print類.m文件(實現文件)?

#import "Print.h"?

@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"];?



??? // 獲取器調用?

??? NSLog(@"Caption = /"%@/"", [p caption]);?

??? NSLog(@"Photographer = /"%@/"", [p photographer]);?

??? [pool drain];?



??? return 0;?

}?

運行這段代碼,結果如下:?
2011-05-31 11:12:13.715 demo[1471:903] ClassName = "Print Result"?

2011-05-31 11:12:13.718 demo[1471:903] Caption = "MyCaption"?

2011-05-31 11:12:13.718 demo[1471:903] Photographer = "MyPhotographer

?

轉載:http://www.cnblogs.com/moonvan/archive/2011/10/13/2210498.html

轉載于:https://www.cnblogs.com/Sumnus/p/3406160.html

總結

以上是生活随笔為你收集整理的object-c 入门基础篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。