亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS常量、變量、屬性及其特性

2019-11-14 18:59:57
字體:
來源:轉載
供稿:網友

1.Objective-C中聲明常量使用關鍵字const。如:const double PI = 3.1514;

2.Objective-C中變量可以分為成員變量、局部變量和全局變量(用的很少,盡量不要用)。

//————————------------常量—————————————————//

方法一:

    #define kDetailKey            @“detail text”

    #define DOWNLOAD_TIMEOUT      60.0

    #define degresssToRadian(x)   (M_PT*(X)/180.0)

    這種方法直接使用#define定義函數、字符串和數字,和普通的C/C++一樣,唯一的區別是字符串需要在前面加上“@”符號。

 

方法二: 

    typedef enum{

        kTagLanguageView = 100,

        kTagSeriesView,

        kTagSeriesDetailView,

        kTagThumbView,

        kTagVideoView,

        kTagFullPhotoView,

    }TagSystemViews;

    使用枚舉定義常量,在這里kTagSeriesView等于101,在程序中直接使用kTagSeriesView來表示這個常量,這和C/C++一樣。 

 

方法三:

    在.m或者.mm文件中使用靜態常量聲明,和C/C++使用方法一樣,例如:

static NSString *BlockColorAlphaComponentKey =@"blockColorAlphaComponent”;      

 

 

//————————------------變量—————————————————//

1.為了強制一個對象隱藏其數據,編譯器限制實例變量范圍以限制其在程序中的可見性。

   但是為了提供靈活性,蘋果也讓開發者顯示設置范圍(四選一)。

2.四種編譯指令如下:

@PRivate    

    實例變量只能被聲明它的類訪問。

 

@protected  

    實例變量能被聲明它的類和子類,所有沒有顯示指定范圍的實例變量都是@protected。

 

@public    

    實例變量可以在任何地方被訪問。

 

@packge

    使用modern運行時,一個@package實例變量在實現這個類的可執行文件鏡像中實際上是@public的,但是在外面就是@private。

    OC中的@package與C語言中的變量和函數的private_extern類似。任何在實現類的鏡像之外想使用這個實例變量都會引發link error。

    這個類型最常用于框架類的實例變量,使用@private太限制,使用@protected或者@public又太開放。

 

 

 

//——————————————屬性—————————————————//

屬性:@property:@property只不過是給編譯器看的一種指令,它可以編譯之后自動為你生成相應的getter和setter方法。 

1.公共屬性表示你打算如何使用這一類的對象。

2.屬性聲明是一個指令,它告訴編譯器如何為變量生成存取方法。(添加屬性聲明后,你將了解到有關存取方法的信息)

3.id類型是一個通用類型,OC使用id表示任意類型的對象,它可以作為一個占位符表示這是一個不確定的類型的對象或者引用。因此,所有的對象都可以用id來表示。

4.編譯器指令@property可以為一個類聲明屬性,這是一個偷懶的好方法,用@property聲明屬性相當于同時聲明并實現了對應的實例變量的訪問器方法。當然,也可以通過指定屬性的特性(Attribute)類控制自動生成的訪問器方法的行為。

 

5.OC里的實例變量默認都是私有的。私有變量只在類自身和子類的實例方法里可見。

 

6.iOS OC聲明變量在@interface括號中和使用@proper的區別:

方式一:直接在@interface中的大括號中聲明。

@interface MyTest:NSObject

{

NSString *mystr;

 

}

方式二:直接用@property聲明

@interface MyTest:NSObject

@property(strong,nonatomic)NSString *mystr;

隨后在.m文件中@synthesize mystr = _myStr;(也可以在.m文件中不加@synthesize)

區別:

方式一聲明的成員變量是只能在自己類內部使用,而不能在類的外部使用(就是通過類名.點的方式顯示不出來。)。

方式二可以在類的外部訪問,也可以在類的內部通過下劃線+變量名或者self.變量名的方式訪問。

蘋果開發模板推薦的是方式二。

7.OC是C的嚴格父集,C能做的事情OC中都能做。

屬性實際上一個setter方法和一個getter方法,所有對實例變量的訪問都是如此,通過setter方法設置值,通過 getter方法獲取值

你沒有必要去優化沒有必要優化的東西,你要優化的是很花時間的東西,而訪問實例變量不會花太多時間。

8..h是共有的API

.m是私有的API以及你所有的實現。

 

所有指針要么是強的,要么是弱的,因為OC需要知道怎樣處理內存和堆。強表示保持這個的存儲,在堆中,保持這個所指的東西

 

7.plist:屬性配置文件,基于xml格式,也扮演了一部分定義UI的角色,Xcode在編譯的時候會讀取里面的配置信息。

8.類的聲明提供了這個類和程序員之間的接口,類的聲明即接口,其實現代碼才是真正執行實際任務的地方。類的聲明以@interface指令開始,以@end指令結束。

9.藍色的豎線:它是UI控件和屏幕邊框的距離參考線以及對齊參考線,用于設置控件在不同大小的屏幕上的位置。

 

 

13.屬性使用點語法,其他情況使用方括號標記語法。

***********************************

copy:

1.簡單復制只能實現淺拷貝:指針賦值,使每個指針指向相同的一塊內存空間,操作不安全。

2.在iOS中可以這樣實現:Foundation類已經遵守了<NSCopying>和<NSMutableCopying>協議,即實現了copy和mutableCopy方法,因此Foundation對象可以使用這些方法創建對象的副本或可變副本。

 

************************** 

為屬性聲明自定義特性

1.訪問器方法

    a。我們通過@synthesize這個標記來為屬性生成訪問器方法。

    b。默認情況下,如果我們聲明的屬性名為propertyName,那么編譯器自動生成的訪問器方法分別為propertyName:和setPropertyName:。

    c。可以通過“getter=getterName”和“setter=setterName”這兩個屬性的自定義特性來設置訪問器方法的名稱。

    d。自定義訪問器方法的名稱會導致“點句式”語法糖不好使。

2.可寫性

    如果給屬性加上readonly的特性:編譯器不會自動生成setter訪問器方法,屬性也就變成只讀的。

3.setter支持的特性

    a。setter方法不僅僅是簡單的賦值,有這么幾個修飾詞是用來描述setter方法的:assign,retain,copy和weak,用不同的修飾詞表示生成的setter方法會有所不同。

    b。默認是assign,這意味著在setter方法中真的就是簡單的賦值。

    c。retain:表示賦值之后會調用新值的retain方法和舊值的release方法。

    d。copy:表示先將值拷貝一份,然后將這個拷貝賦給實例變量,這個修飾詞只適用于實現了NSCopying協議的類型。

    e。weak:表示這個值將是一個弱引用,引用和被引用之間沒有所屬關系。如果系統銷毀了某個屬性所引用的對象,屬性的值會自動地變為nil。一般情況下,如果父對象擁有子對象的引用,那么子對象就不應該再持有父對象的強引用,而是使用弱引用的方式來引用父對象。

    f。strong:表示這個值是一個強引用,引用和被引用之間具有所屬關系。從內存使用的角度來看,就是引用對象被回收之前,被引用的對象不會被回收。

4.原子化和非原子化:atomi和nonatomic用來決定編譯器生成的getter和setter是否為原子操作。

 

    a。nonatomic指定訪問器方式是非線程安全的,即多個線程可以同時訪問這個屬性。

    b。默認情況下,訪問器方法都是 線程安全的,即使在多線程環境中也毫無風險的。然而,即使要保證在多線程環境中能正常工作,訪問器也不一定必須是線程安全的。而將訪問器方法指定為非線程安全的,可以讓getter方法直接返回實例變量的值,效率更高。

 

********************

合成(Synthesizing)屬性

1.聲明一個屬性之后編譯器會自動將相關的代碼補充完整,即編譯器會自動聲明一個實例變量以及相關的訪問器方法,實例變量的名稱是屬性名稱前面加上下劃線。

2.不過有時候我們需要自己來指定實例變量的名稱,這時候就需要用到@synthesize指令了。

3.

    a。如果你不得不手動指定屬性對應的實例變量的名稱,請在@implementation指令之后使用@synthesize指令做如下聲明:

        @synthesize label;

這行代碼要求編譯器根據接口中聲明的屬性來自動生成訪問器方法。

    b。也可以使用如下的方式來指明訪問器方法使用的實例變量的名稱:

        @synthesize label = _label;

這里指明了實例變量名為_label,而且這是一種很好的封裝實例變量的方法,讓所有對該實例變量的訪問都通過訪問器方法來執行。同時,這種方法也可以避免編譯器自動取名字時和已用的實例變量名稱沖突的情況。

 

 

 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久噜噜噜久噜久久| 国产精品精品一区二区三区午夜版| 国产一区二区三区在线免费观看| 性欧美激情精品| 91精品国产亚洲| 久久精视频免费在线久久完整在线看| 亚洲老板91色精品久久| 在线观看国产成人av片| 精品少妇v888av| 日本一区二区三区四区视频| 欧美日韩亚洲高清| 久久久久这里只有精品| 日韩中文字幕在线观看| 91sao在线观看国产| 国产精品视频大全| 亚洲天堂免费观看| 国产成+人+综合+亚洲欧美丁香花| 精品国产乱码久久久久久虫虫漫画| 欧美成人精品在线| 免费97视频在线精品国自产拍| 国产精品久久久久秋霞鲁丝| 一区二区三区四区在线观看视频| 国产亚洲精品美女久久久| 久久久久久久久久久亚洲| 久久中文字幕国产| 国产午夜精品免费一区二区三区| 成人av在线天堂| 第一福利永久视频精品| 国产亚洲欧美日韩一区二区| 国产一级揄自揄精品视频| 成人久久一区二区| 69视频在线播放| 韩国一区二区电影| 91免费视频国产| 亚洲va电影大全| 在线亚洲午夜片av大片| 97在线视频免费播放| 中文字幕九色91在线| 成人xxxx视频| 国产亚洲美女精品久久久| 国产一区二区三区免费视频| 九九热视频这里只有精品| 日韩av网站大全| 国产成人精品免高潮费视频| 日韩免费观看在线观看| 岛国av一区二区在线在线观看| 欧美激情久久久久久| 91伊人影院在线播放| 九九视频这里只有精品| 欧美极品美女电影一区| 久久久欧美精品| 国产精品中文字幕久久久| 日韩性生活视频| 欧美成人一区在线| 欧美性猛交xxxx黑人猛交| 国产精品美女免费视频| 国产午夜精品全部视频播放| 欧美激情2020午夜免费观看| 久久久国产视频91| 国产成人中文字幕| 人妖精品videosex性欧美| 久久久亚洲国产天美传媒修理工| 蜜臀久久99精品久久久无需会员| 成人免费淫片视频软件| 国产成人免费av电影| www.亚洲免费视频| 日本亚洲欧美三级| 日韩福利在线播放| 岛国视频午夜一区免费在线观看| 欧美成人性生活| 午夜免费在线观看精品视频| 91视频国产精品| 91精品在线观看视频| 国产伦精品一区二区三区精品视频| 2021久久精品国产99国产精品| 欧美人在线观看| 国产精品久久久久av免费| 欧美激情xxxxx| 国产亚洲一区二区精品| 国产精品91久久久| 国产成人综合av| 日产精品99久久久久久| 欧美午夜影院在线视频| 人人做人人澡人人爽欧美| 久久久免费精品视频| 国产69精品久久久久9999| 亚洲一区二区三区乱码aⅴ| www.日韩不卡电影av| 日韩大胆人体377p| 影音先锋欧美精品| 国产99久久精品一区二区永久免费| 欧美理论电影网| 欧美在线观看日本一区| 国产精品女人久久久久久| 人体精品一二三区| 亚洲美女精品成人在线视频| 久久国产精品影视| 2019亚洲男人天堂| 久久国产一区二区三区| 97精品国产97久久久久久免费| 欧美成人中文字幕| 成人性教育视频在线观看| 亚洲日本aⅴ片在线观看香蕉| 国产热re99久久6国产精品| 欧美区在线播放| 中文字幕亚洲一区二区三区五十路| 欧美视频二区36p| 一区二区欧美激情| 欧美日韩午夜视频在线观看| 国产亚洲欧美日韩精品| 日韩在线观看av| 韩国三级日本三级少妇99| 久久久国产精品亚洲一区| 色综合亚洲精品激情狠狠| 成人精品一区二区三区电影黑人| 日韩有码在线观看| 欧美日韩免费观看中文| 最近中文字幕mv在线一区二区三区四区| 欧美日韩综合视频网址| 国产97在线|亚洲| 日本精品久久电影| 91视频国产一区| 精品少妇v888av| 成人免费看黄网站| 国语自产精品视频在线看抢先版图片| 亚洲肉体裸体xxxx137| 91久久精品久久国产性色也91| 日韩黄色在线免费观看| 午夜精品一区二区三区视频免费看| 久久影视三级福利片| 韩剧1988在线观看免费完整版| 国产精品视频26uuu| 欧洲成人性视频| 91在线色戒在线| 久久中文字幕一区| 97热在线精品视频在线观看| 日韩欧美精品网址| 色偷偷噜噜噜亚洲男人的天堂| 亚洲精品电影在线| 欧美视频在线免费| 中文综合在线观看| 日韩资源在线观看| 亚洲欧美中文日韩在线v日本| 中文字幕一区电影| 欲色天天网综合久久| 国产成人在线一区二区| 亚洲精品资源美女情侣酒店| 91免费欧美精品| 亚洲成人动漫在线播放| 久久精品中文字幕一区| 欧美一级免费看| 国产精品久久久久久久久久三级| 亚州精品天堂中文字幕| 日韩精品免费综合视频在线播放| 国产视频久久久久久久| 亚洲人成在线观| 97国产成人精品视频| 国产午夜精品麻豆| 18久久久久久| 91精品国产色综合久久不卡98| 欧美精品久久久久久久| 姬川优奈aav一区二区| 91色琪琪电影亚洲精品久久| 91国产高清在线|