• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            拂曉·明月·彎刀

            觀望,等待只能讓出現的機會白白溜走

              C++博客 :: 首頁 ::  :: 聯系 :: 聚合  :: 管理 ::

            以下筆記參考網站:http://blog.csdn.net/huanglx1984/archive/2009/07/06/4325377.aspx

            1. 目前好象只有Apple使用Objective-C作為其支持的語言吧。
            2. 與C++的不同之處有:
              • O-C中所有的類都必須繼承自NSObject。
              • O-C中所有對象都是指針的形式。
              • O-C用self代替this。
              • O-C使用id代替void*。
              • O-C使用nil表示NULL
              • O-Ck只支持單繼承。
              • O-C使用YES/NO表示TRUE/FALSE
              • O-C使用#import代替#include
              • O-C中用消息表示類的方法,并采用[aInstance method:argv]調用形式。
              • O-C支持反射機制
              • O-C支持Dynamic Typing, Dynamic Binding和Dynamic Loading
            3. 與C++的相同之處有:
              • 與C共享的部分一致。
              • 可以使用assert(BOOL), 一般用NSCParameterAssert(BOOL)代替。
            4. O-C中的命名前綴說明:
              • NS-:NextStep
              • CF-:Core Foundation
              • CA-:Core Animation
              • CG-:Core Graphics
              • UI-:User Interface
            5. O-C中的消息特殊性:
              • 調用消息的類可以不知道如何響應這個消息。如果它不知道如何處理這個消息,它會自動的將這個消息轉給其他的類,比如它的父類。
              • 調用消息的類可以是nil。在C++中,在使用類方法之前,我們都需要檢查對象是否為空,所以在實現析構函數的時候,常會有如下的代碼,如if (var) { delete var; } 但是在objective c中,我們就可以直接寫[var release]; 即使var == nil, 也不會有問題。
            6. O-C中的函數聲明格式有:
              • -/+ (return type) function_name;

              • -/+ (return type) function_name : (parameter type) parameter;

              • -/+ (return type) function_name : (parameter type) parameter1 otherParameter : (parameter_type) parameter2

              • 以上參數說明:-表示一般函數,+表示靜態函數。otherParameter是參數的別名(第一個參數的別名省略),在函數調用時方便指定。

            7. O-C中的構造/析構函數

              • O-C中的init()/release()對應于C++的構造/析構函數。alloc()/dealloc()也就對應于C++的new和delete,其中的dealloc()由于引用計數的自動調用而不用手動調用。

              • O-C中父類的init()/release()函數需要子類的手動調用。而且每次都必須調用。不同于C++的自動調用。

              • 構造函數(- (id) init)調用形如:CSample* pSample=[CSample alloc] init];其中alloc(+ (id) alloc)是繼承來的static函數,init是繼承來的一般函數,如重寫一般函數時,則相當于C++的覆蓋(不帶參數)或重載(帶參數)。

              • 析構函數(- (void) release)將引用計數減1,當=0時父類的release()會自動調用dealloc(- (void) dealloc);

            8. 當O-C沒有數據成員時,可省略{},建議保留。

            9. 繼承下來的方法,如:-(id) init可以頭文件中省略,建議保留

            10. 0-C中只有數據成員的訪問限制,沒有方法的訪問限制。

              • 同C++一樣,數據成員有三種訪問限制public, protected, private,缺省是protected。

              • 示例:@interface AccessExample: NSObject {
                @public
                int publicVar;
                @protected
                int protectedVar;
                @private
                int privateVar;
                }
                @end

              • 方法的訪問限制可通過Category實現

              • 示例:

                @interface MyClass

                - (void) sayHello {

                NSLog(@"Hello");

                }

                @end


                @interface MyClass(Private)

                - (void) kissGoodbye;

                @end

            11. O-C中沒有類的靜態變量,只有全局變量

            12. O-C中的數組NSArray可以保存不同類型的數據。

            13. O-C也支持run-time時的類類型檢查

              • - (BOOL) isKindOfClass: classObj
                用于判斷該對象是否屬于某個類或者它的子類

              • - (BOOL) isMemberOfClass: classObj
                用于判斷該對象是否屬于某個類(這里不包括子類)

              • - (BOOL) respondsToSelector: selector
                用于判斷該對象是否能響應某個消息。這里,我們可以將@selector后面帶的參數理解為C++中的函數指針。
                注意:1)不要忘了@ 2)@selector后面用的是(),而不是[]。3)要在消息名稱后面跟:,無論這個消息是否帶參數。如:[pSquare respondsToSelector:@selector(Set: andHeight:)]。

              • + (BOOL) instancesRespondToSelector: selector
                用于判斷該類是否能響應某個消息。這是一個靜態函數。

              • -(id) performSelector: selector :調用對象的selector方法。

              • conformsToProtocol 類似于respondsToSelector ,用于動態檢查某個對象是否遵守某個協議。

            14. Category:在沒有源代碼的情況下,為一個已經存在的類添加一些新的功能

              • 只能添加新的方法,不能添加新的數據成員

              • Category 的名字必須是唯一的

            15. Protocol:相當于C++中的純虛類

              • 形如:@interface MyDate: NSObject <Printing> { } @end
              • 使用:MyDate * dat = [[MyDate alloc] init]; id<Printing> var = dat; [var print]。
              • 說明:我們首先聲明了Printing 協議,任何遵守這個協議的類,都必須實現print 方法。在Objective C 中,我們通過<>來表示遵守某個協議。當某個類聲明要遵守某個協議之后,它就必須在.m文件中實現這個協議中的所有方法。使用id<Printing> 作為類型,而不是象C++中的Printing* var。
            16. IBOutlet, IBAction: 這兩個東西其實在語法中沒有太大的作用。如果你希望在Interface Builder中能看到這個控件對象,那么在定義的時候前面加上IBOutlet,在IB里就能看到這個對象的outlet,如果你希望在Interface Builder里控制某個對象執行某些動作,就在方法前面加上(IBAction)。
            17. 盡量避免在一行語句中進行兩層以上的嵌套
            18. 消息轉發:- (void) forwardInvocation: (NSInvocation*)anInvocation;

            Technorati :
            Del.icio.us :
            Zooomr :
            Flickr :

            posted on 2009-08-25 08:39 一路風塵 閱讀(2569) 評論(2)  編輯 收藏 引用 所屬分類: iPhone編程

            評論

            # re: Objective-C學習筆記[未登錄] 2009-08-25 09:48 Davy.xu
            OC是一種神奇的語言,火星編程語言  回復  更多評論
              

            # re: Objective-C學習筆記 2009-08-25 17:28 wells
            @Davy.xu
            真逗!  回復  更多評論
              

            人妻精品久久无码区| 久久久久人妻精品一区三寸蜜桃 | 国产精品成人99久久久久91gav| 国产婷婷成人久久Av免费高清| 久久免费高清视频| 久久久久久免费视频| 日韩人妻无码精品久久久不卡| 麻豆精品久久精品色综合| 中文精品99久久国产| 久久被窝电影亚洲爽爽爽| 欧美性猛交xxxx免费看久久久| 蜜臀av性久久久久蜜臀aⅴ麻豆| 亚洲一区二区三区日本久久九| 超级碰碰碰碰97久久久久| 四虎国产精品免费久久久| 久久精品卫校国产小美女| 久久精品国产亚洲AV不卡| 久久天天躁狠狠躁夜夜avapp| 久久中文字幕无码专区 | 99久久精品国产一区二区三区 | 一本大道久久东京热无码AV | 深夜久久AAAAA级毛片免费看| 2022年国产精品久久久久| 欧美激情一区二区久久久| 精品无码人妻久久久久久| 精品久久久无码人妻中文字幕豆芽| 亚州日韩精品专区久久久| 久久99精品久久久久久秒播| 国产情侣久久久久aⅴ免费| 久久AV高潮AV无码AV| 亚洲伊人久久成综合人影院 | 久久99国产综合精品免费| 久久国产劲爆AV内射—百度| 最新久久免费视频| 亚洲精品美女久久久久99小说| 国产免费久久精品99久久| 伊人久久大香线蕉精品| 51久久夜色精品国产| 国产精品成人久久久久三级午夜电影 | 亚洲欧美国产日韩综合久久| 久久久不卡国产精品一区二区|