當前位置:首頁 » 編程軟體 » objectivec編程

objectivec編程

發布時間: 2022-12-26 00:17:53

1. Objective-C的介紹

Objective-C,通常寫作ObjC或OC和較少用的Objective C或Obj-C,是擴充C的面向對象編程語言。它主要使用於Mac OS X和GNUstep這兩個使用OpenStep標準的系統,而在NeXTSTEP和OpenStep中它更是基本語言。GCC與Clang含Objective-C的編譯器,Objective-C可以在GCC以及Clang運作的系統上編譯。1980年代初布萊德·考克斯(Brad Cox)在其公司Stepstone發明Objective-C。他對軟體設計和編程里的真實可用度問題十分關心。Objective-C最主要的描述是他1986年出版的書 Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.

2. 如何理解 Objective-C編程的KVO 原理

本文來源於:cocoachina
KVO(Key Value Observing),是觀察者模式在Foundation中的實現。

KVO的原理

簡而言之就是:

1、當一個object有觀察者時,動態創建這個object的類的子類

2、對於每個被觀察的property,重寫其set方法

3、在重寫的set方法中調用- willChangeValueForKey:和- didChangeValueForKey:通知觀察者

4、當一個property沒有觀察者時,刪除重寫的方法

5、當沒有observer觀察任何一個property時,刪除動態創建的子類

空說無憑,簡單驗證下。

@interface Sark : NSObject @property (nonatomic, ) NSString *name; @end @implementation Sark @end

Sark *sark = [Sark new]; // breakpoint 1 [sark addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil]; // breakpoint 2 sark.name = @"薩薩薩"; [sark removeObserver:self forKeyPath:@"name"]; // breakpoint 3 斷住後分別使用- class和object_getClass()打出sark對象的Class和真實的Class

// breakpoint 1 (lldb) po sark.class Sark (lldb) po object_getClass(sark) Sark // breakpoint 2 (lldb) po sark.class Sark (lldb) po object_getClass(sark) NSKVONotifying_Sark // breakpoint 3 (lldb) po sark.class Sark (lldb) po object_getClass(sark) Sark 上面的結果說明,在sark對象被觀察時,framework使用runtime動態創建了一個Sark類的子類NSKVONotifying_Sark,而且為了隱藏這個行為,NSKVONotifying_Sark重寫了- class方法返回之前的類,就好像什麼也沒發生過一樣。但是使用object_getClass()時就暴露了,因為這個方法返回的是這個對象的isa指針,這個指針指向的一定是個這個對象的類對象

然後來偷窺一下這個動態類實現的方法,這里請出一個NSObject的擴展NSObject+DLIntrospection,它封裝了列印一個類的方法、屬性、協議等常用調試方法,一目瞭然。

@interface NSObject (DLIntrospection) + (NSArray *)classes; + (NSArray *)properties; + (NSArray *)instanceVariables; + (NSArray *)classMethods; + (NSArray *)instanceMethods; + (NSArray *)protocols; + (NSDictionary *)descriptionForProtocol:(Protocol *)proto; + (NSString *)parentClassHierarchy; @end

然後繼續在剛才的斷點處調試:

// breakpoint 1 (lldb) po [object_getClass(sark) instanceMethods] <__NSArrayI 0x8e9aa00>( - (void)setName:(id)arg0 , - (void).cxx_destruct, - (id)name ) // breakpoint 2 (lldb) po [object_getClass(sark) instanceMethods] <__NSArrayI 0x8d55870>( - (void)setName:(id)arg0 , - (class)class, - (void)dealloc, - (BOOL)_isKVOA ) // breakpoint 3 (lldb) po [object_getClass(sark) instanceMethods] <__NSArrayI 0x8e9cff0>( - (void)setName:(id)arg0 , - (void).cxx_destruct, - (id)name )

大概就是說arc下這個方法在所有dealloc調用完成後負責釋放所有的變數,當然這個和KVO沒啥關系了,回到正題。

從上面breakpoint2的列印可以看出,動態類重寫了4個方法:

1、- setName:最主要的重寫方法,set值時調用通知函數

2、- class隱藏自己必備啊,返回原來類的class

3、- dealloc做清理犯罪現場工作

4、- _isKVOA這就是內部使用的標示了,判斷這個類有沒被KVO動態生成子類

接下來驗證一下KVO重寫set方法後是否調用了- willChangeValueForKey:和- didChangeValueForKey:

最直接的驗證方法就是在Sark類中重寫這兩個方法:

@implementation Sark - (void)willChangeValueForKey:(NSString *)key { NSLog(@"%@", NSStringFromSelector(_cmd)); [super willChangeValueForKey:key]; } - (void)didChangeValueForKey:(NSString *)key { NSLog(@"%@", NSStringFromSelector(_cmd)); [super didChangeValueForKey:key]; } @end

3. 如何學好OBJECTIVEC

1.請先把c語言基礎學好;
2.看《Programming in Objective-C 2.0》,不要看《Objective-C 2.0程序設計》;
3.看《Cocoa Design Patterns》和《Cocoa Programming Developer's Handbook》,不要因為他們很難而我們自己是初學者所以就不看;
4.是的,你需要一台Mac,如果你真的打算好好學Objective-C和Cocoa的話;
5.不要放過任何一個看上去很簡單的小編程問題——他們往往並不那麼簡單,或者可以引伸出很多知識點;
6.會用Objective-C,並不說明你會Cocoa編程;
7.學語法並不難,Foundation,Appkit,UIKit,Core Data,Core Animation也不過如此——難的是長期堅持實踐和不遺餘力的查閱文檔;
8.請時刻記住,要寫出好的App,界面設計和程序功能同等重要——其實可以時刻記住:Mac/iOS用戶界面規約也是必讀的文檔;
9.不看C語言的書,是學不好Objective-C語言的;
10.浮躁的人容易說:XX語言不行了,應該學YY;——是你自己不行了吧!?
11.浮躁的人容易問:我到底該學什麼;——別問,學就對了;
12.浮躁的人容易問:XX有錢途嗎;——建議你去搶銀行;
13.浮躁的人容易說:我要中文版!我英文不行!——不行?學呀!
14.浮躁的人容易問:XX和YY哪個好;——告訴你吧,都好——只要你學就行;
15.浮躁的人分兩種:a)只觀望而不學的人;b)只學而不堅持的人;
16.Cocoa是Objective-C的框架,主要包括Foundation,Appkit和Core Data。Cocoa Touch是Cocoa的iOS版本,主要包括Foundation,UIKit和Core Data;
17.Objective-C不僅僅是為C加了個類——運行時環境同樣至關重要;
18.學習編程最好的方法之一就是閱讀文檔和源代碼,請善用Xcode文檔里的程序實例源代碼;
19.請記住,Objective-C是「動態」的語言;
20.請閱讀《Objective-C 2.0 Programming Language》等文檔——官方的文檔總是最權威,最完整的參考書;
21.看得懂的書,請仔細看;看不懂的書,請硬著頭皮看;
22.別指望看第一遍書就能記住和掌握什麼——請看第二遍、第三遍;
23.請記住,iOS和Mac開發本質上是相同的,不過區別也同樣要被重視;
24.不要停留在Xcode的層面上。掌握通過命令行使用gcc和gdb,以及git等工具,將使你效率倍增;
25.和別人一起討論有意義的Objective-C和Cocoa知識點,而不是爭吵Cocoa行不行或者Objective-C與C++哪個好;
26.不要被各種Core XXX等「技術」名詞所迷惑,它們只不過是C和Objective-C的框架(庫)而已;
27.如果你學過C++,請暫時忘記使用.(點)調用方法,Objective-C是用方括弧的,並且更准確的名字叫做「消息傳遞」;
28.Objective-C是C語言的嚴格超集,和C語言聯系緊密,C語言是Objective-C的一部分;
29.請不要認為學過C++語言再改學Objective-C就沒有什麼問題——你只不過又在學一門全新的語言而已;
30.讀完了《Cocoa Programming Developer's Handbook》以後再來認定自己是不是已經學會了Objective-C;
31.學習編程的秘訣是:編程,編程,再編程;
32.請留意下列書籍:《Cocoa Programming Developer's Handbook》《Cocoa Design Pattern》《iOS 4 Advaced Programming》《Cocoa Programming A Quick-Start Guide for Developers》;
33.不要因為蘋果是個商業公司,你就可以忘記開源。於個人來說,開源是給予,但你卻獲得了更多。別忘了,蘋果自己也使用了大量開源技術;
34.請把書上的程序例子親手輸入到電腦上實踐,即使配套光碟中有源代碼;
35.空閑的時候可以把自己的想法變成代碼,並放到github上去,或把它變成App Store里的一個軟體;
36.請重視Objective-C的運行時環境編程,並將其切實的運用到自己的程序中;
37.經常回顧自己以前寫過的程序,並嘗試重寫,把自己學到的新知識運用進去;
38.不要漏掉書中任何一個練習題——請全部做完並記錄下解題思路;
39.Objective-C,Cocoa和Xcode集成開發環境要同時學習和掌握;
40.既然決定了學Objective-C,就請堅持學下去,因為學習程序設計語言的目的是掌握程序設計技術,而程序設計技術是跨語言的;
41.工欲善其事,必先利其器,要做好Objective-C和Cocoa開發,請用好Xcode;
42.當你寫Cocoa程序寫到一半卻發現自己用的方法很拙劣時,請不要馬上停手;請盡快將餘下的部分粗略的完成以保證這個設計的完整性,然後分析自己的錯誤並重新設計和編寫(參見43);
43.別心急,設計Objective-C的類確實不容易;自己程序中的類和自己的類設計水平是在不斷的編程實踐中完善和發展的;
44.決不要因為程序「很小」就不遵循某些你不熟練的規則——好習慣是培養出來的,而不是一次記住的;
45.每學到一個Objective-C的難點的時候,嘗試著對別人講解這個知識點並讓他理解——你能講清楚才說明你真的理解了;
46.記錄下在和別人交流時發現的自己忽視或不理解的知識點;
47.請不斷地對自己寫的程序提出更高的要求,哪怕你的程序版本號會變成Version 100.XX;
48.保存好你寫過的所有的程序——github是你最佳的代碼託管工具;
49.請不要做浮躁的人;
50.請熱愛Objective-C!

4. Objective-C和C的區別

區別如下:

1.性質不同

Objective-C,通常寫作ObjC或OC和較少用的Objective C或Obj-C,是擴充C的面向對象編程語言。C語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發。

2.特點不同

Objective-C是非常實用的語言。它是一個用C寫成很小的運行庫,令應用程序的尺寸增加很小,和大部分OO系統使用極大的VM執行時間會取代了整個系統的運作相反。C語言是一種結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利於程序的調試,且c語言的處理和表現能力都非常的強大。

3.創始時間不同

Objective-C創始時間是1980年代,C語言創始時間是1972年。

5. 如何自學objective c語言

ObjC是進行iOS開發的一門編程語言,也是官方推薦的iOS開發語言。對於沒有相應開發經驗的人來說,學習ObjC入門會慢一些。一般我把這個學習過程分為三步。

第一步,學習開發語言Objective-C。參考書看《Objective-C基礎教程》這本書就行了。書看到後來還需要補充一些關於面向對象的知識,一般計算機專業的學生都是在學C++的時候接觸這類思想的。我推薦的那本參考書里也會有一些講解,進階的學習需要以後再去看資料,沒有特定教材,因為面向對象是一種編程思想,好在Objective-C本身就是這種思想的體現,以後寫代碼的時候可以慢慢體會。學完《Objective-C基礎教程》,就會對iOS開發中所用到的基礎數據類有一個了解了,這時候應該就可以寫簡單的無界面程序了。

第二步,學習iOS開發的軟體運行原理,軟體開發思想、規范以及一些蘋果公司提供的常用標准UI(User Interface,用戶界面)控制項的使用方法。這個階段推薦的參考書是《iPhone 4與iPad開發基礎教程》,該書有中文譯本,雖然不是最新的iOS教程(最新的教程應該是iOS7開發基礎教程,但是該書沒有中文譯本,如果英文過硬,看這本書當然最好)。

第三步,熟悉常用第三方控制項。因為蘋果本身開放性的局限,其提供的標准開發庫會有一些功能局限,智慧無線的網友們開發了各種各樣的第三方控制項來實現他們想要的功能,可以使開發過程事半功倍。此部分為進階學習內容,需要在掌握前兩步內容的基礎上展開。這一步主要是試用,學習第三方代碼,要求閱讀第三方開發文檔以及代碼多一些。可以與開發同時進行,邊學變進行軟體開發。

除了參考書,這里推薦一個網站「Cocoachina蘋果開發中文站」裡面分享了很多網友的代碼,並且可以對自己學習過程中遇到的問題進行討論。學習初期,中期以及後期進階都可以在這個論壇找到相應的學習資料與代碼,並且可以通過發帖得到大神的技術指點。對應的英文網站是Stackflow,此網站偏重實際開發問題的解決,交流語言為英文。

另外,斯坦福大學每年都開設iOS開發的公開課,從Objective-C的學習到最後的控制項使用以及開發思想,架構的學習,都有涉獵,是很好的視頻教程。網易公開課中有以往課程配中文字幕的視頻,而最新的課程一般沒有中文字幕,並且,該課程選擇默認學生已經有C++編程基礎,可能對於初學者會困難一些。視頻屬於公開資源,在搜索引擎上搜索斯坦福、iOS等關鍵字,即可找到相應資源。剛剛簡單搜索了一下,優酷已經提供iOS7開發的高清視頻專輯。

最後,無論學習哪個操作系統的軟體開發,最關鍵還是要多多練習,因此大量的寫練習代碼,看別人的優秀代碼很重要。

6. Objective-C 程序設計的介紹

《Objective-C程序設計(第4版)》是一本Objective—C編程領域最暢銷的書籍,內容涵蓋Xcode 4.2和自動引用計數(ARC)。《Objective-C程序設計(第4版)》詳細介紹了Objective—C和蘋果iOS、Mac平檯面向對象程序編程的知識。《Objective-C程序設計(第4版)》結合獨特的學習方法,在每章都編寫有大量的小程序例子和練習,使Objective—C程序設計適合於課堂教學和自學。

7. Objective-C是一種什麼樣的語言

Objective-C是一種通用、高級、面向對象的編程語言。它擴展了標準的ANSI C編程語言,將Smalltalk式的消息傳遞機制加入到ANSI C中。當前主要支持的編譯器有GCC和Clang。
Objective-C的商標權屬於蘋果公司,蘋果公司也是這個編程語言的主要開發者。蘋果在開發NeXTSTEP操作系統時使用了Objective-C,之後被OS X和iOS繼承下來。現在Objective-C與Swift是OS X和iOS操作系統、及與其相關的API、Cocoa和Cocoa Touch的主要編程語言。

8. objective-c與c和c++有什麼區別,也是一種編程語言嗎

objective-c是一種編程語言,是apple官方的應用開發語言(如iOS、MacOS上的應用)
C和C++的區別在於C++支持面向對象編程
objective-c與二者的區別其實還是有些的,OC也是面向對象編程。但是在OC中它的類也是一個對象,所有OC中的運行時可以做很多事情。
然後就是語法了,OC中類似C\C++的函數調用,成為消息,如我們調用對象A中的sayHello方法,就是給對象A發送一個sayHello的消息
[A sayHello]
其實最終還是轉換成了C函數msg_send()
另外OC的運行時代碼大部分都是用C實現的
不太清楚你要的區別指什麼,大概描述了下

熱點內容
壓縮長抱枕 發布:2025-07-18 16:13:38 瀏覽:503
如何使用wifi熱點配置網路 發布:2025-07-18 16:06:25 瀏覽:968
android軟鍵盤數字 發布:2025-07-18 16:03:18 瀏覽:610
三菱plc編程軟體官網 發布:2025-07-18 15:59:59 瀏覽:436
gse源碼 發布:2025-07-18 15:58:15 瀏覽:626
編譯鏈c語言執行速度 發布:2025-07-18 15:52:51 瀏覽:554
在線編程課程 發布:2025-07-18 15:46:56 瀏覽:172
生兔子演算法循環 發布:2025-07-18 15:44:32 瀏覽:46
背包規劃演算法 發布:2025-07-18 15:44:27 瀏覽:109
微信安卓手機哪裡設置鈴聲 發布:2025-07-18 15:36:54 瀏覽:780