麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

熟悉objective-c

2019-11-09 16:51:00
字體:
供稿:網(wǎng)友

1.objective-c為c語言添加了面向?qū)ο筇匦裕瑵駳獬?jí)。objective-c使用東臺(tái)綁定的消息結(jié)構(gòu),也就是說,在運(yùn)行時(shí)才檢查對象類型。接收一條消息后,究竟應(yīng)執(zhí)行何種代碼,由運(yùn)行期環(huán)境而非編譯器來決定。

2.將引入頭文件的時(shí)機(jī)盡量延后,只在確有需要時(shí)才引入,這樣就可以減少類的使用者所需引入的頭文件數(shù)量,如果在各自頭文件中引入對方的頭文件,則會(huì)導(dǎo)致“循環(huán)引用”,當(dāng)解析其中一個(gè)頭文件的時(shí),編譯器會(huì)發(fā)現(xiàn)它引用了另一個(gè)頭文件,兒那個(gè)頭文件又回頭引用第一個(gè)頭文件。使用#import而非#include指令雖然不會(huì)導(dǎo)致是循環(huán),但卻意味著這兩個(gè)類有一個(gè)無法被正確編譯

3.多用字面量語法,少用與之等價(jià)的方法

字面量語法語法如下:

    NSString *string = @"string";    NSNumber *number = @12;不用字面量方式創(chuàng)建:
    NSNumber *number = [NSNumber numberWithInt:12];字面量語法更為精簡,并且有很多其他好處

使用字面量創(chuàng)建

    NSArray *arr = @[@"obj1",@"obj2",@"obj3"];    NSString *obj = arr[1];不適用字面量

    NSArray *arr = [[NSArray alloc]initWithObjects:@"obj1",@"obj2",@"obj3", nil];    NSString *obj = [arr objectAtIndex:1];使用字面量更加簡潔,不過使用字面量語法創(chuàng)建數(shù)組時(shí)要注意,若數(shù)組元素對象中有nil,則會(huì)拋出異常,因?yàn)樽置媪空Z法實(shí)際上只是一種“語法糖”(syntactic sugar),其效果扥與先創(chuàng)建一個(gè)數(shù)組,然后把方括號(hào)內(nèi)的所有對象都加到這個(gè)數(shù)組中。

    id obj1 = /*....*/;    id obj2 = /*....*/;    id obj3 = /*....*/;    NSArray *arrA = [NSArray arrayWithObjects:obj1,obj2,obj3, nil];    NSArray *arrB = @[obj1,obj2,obj3];當(dāng) obj1和obj3都指向有效對象,而obj2是nil,則按字面量語法創(chuàng)建數(shù)組arrB時(shí)會(huì)拋出異常,arrA雖然該創(chuàng)建出來,但只含有obj1一個(gè)對象,原因是arrWithObjects會(huì)一次處理各個(gè)參數(shù),知道法相nil為止,這個(gè)微妙的差別表明使用字面量語法更為安全,拋出異常使程序終止執(zhí)行,這比創(chuàng)建好數(shù)組后才發(fā)祥元素少了要好,同理字典也是這樣

字面量語法有個(gè)小小的限制,就是除了字符串以外,歲創(chuàng)建的對象必須屬于Foundation框架,如果自定義了這些類的子類,則無法使用字面量語法創(chuàng)建對象。

使用字面量語法創(chuàng)建的字符串,數(shù)組,字典對象都是不可變的,若想要可變版本的對象,則需要復(fù)制一份:

    NSMutableArray *mutarr = [@[@"1",@"2"]mutableCopy];4.多用類型常量,少用#define預(yù)處理指令

編寫代碼的時(shí)候經(jīng)常要定義常量,例如,要定義一個(gè)動(dòng)畫時(shí)間,也許會(huì)用這種方法來做

#define ANIMATON_DURATION 0.3

上述預(yù)處理命令會(huì)吧源代碼中的ANIMATION_DURATION替換成0.3,但是這樣定義出來的常量沒有類型信息,此外,預(yù)處理過程會(huì)把碰到的所有ANIMATION_DURATION替換成0.3,要解決此問題,應(yīng)該利用編譯器的某些特性才對,比如

static const NSTimeInterval kAnimationDuration = 0.3;

此處清楚地描述了敞亮的含義,由此可知改常量類型為NSTimeInterval這有助于為其編寫開發(fā)文檔,如果要定義許多常量,那么這種方式會(huì)令稍后的閱讀代碼的人更加容易理解其意圖。

還要注意常量常用命名法是:若常量局限某“編譯單元”之內(nèi),則在之前加字母k;若常量在類之外可見,則通常以類名為前綴。

定義常量位置很重要,在頭文件中申明可能互相沖突,其實(shí)就連用static const定義的常量也不應(yīng)該出現(xiàn)在頭文件中,這樣等于申明了一個(gè)全局變量,如果不打算公開某個(gè)常量,可以在實(shí)現(xiàn)文件了這樣寫

static const NSTimeInterval kAnimationDuration = 0.3;變量一定要同時(shí)使用static和const來申明,如果不加static則編譯器會(huì)創(chuàng)建一個(gè)“外部符號(hào)”,此時(shí)如果另一個(gè)便一單元也申明同名變量,就會(huì)報(bào)錯(cuò)

有事會(huì)對外公開某個(gè)常量,則可以如下定義

//  In the header file

extern NSTimeInterval *const EOCAnimationDuration// In the implementation file

NSTimeInterval *const EOCAnimationDuration = 0.3;
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人性生活视频 | 久久久久久久久久综合 | 免费一级欧美在线观看视频 | 国产精品色综合 | 粉嫩粉嫩一区二区三区在线播放 | 欧美日韩亚洲一区二区三区 | 免费毛片播放 | av在线播放网址 | 免费看性xxx高清视频自由 | 精品一区二区免费 | av免播放 | 99久久精品免费 | 蜜桃欧美性大片免费视频 | 免费在线观看中文字幕 | 国产免费激情视频 | 草久视频在线观看 | 一级电影在线免费观看 | av一道本 | 国产精品久久久久久久久久久久久久久久 | 亚洲一区二区免费视频 | 国产午夜精品一区二区三区嫩草 | 午夜视频久久 | 综合网日日天干夜夜久久 | free japan xxxxhdsex69| 久久最新网址 | 91精品国产毛片 | 久久久久久久91 | 免费a网| 天天操天天碰 | 91精品国产91久久久 | 国产成人自拍视频在线观看 | av影院在线播放 | 97干色| 99国语露脸久久精品国产ktv | 日韩欧美高清一区 | 久久国产精品免费视频 | 国内精品一级毛片免费看 | 久久sp| 成人福利免费在线观看 | 免费观看黄色一级视频 | 18pao国产成人免费视频 |