Effective系列-01

Effective系列-01

1. import 與向前聲明(forward declaring)

1.import

當(dāng)我們創(chuàng)建一個(gè)類時(shí),系統(tǒng)會(huì)在這個(gè)類的頭文件中自動(dòng)替我們import需要的框架

//Person.h
#import <Foundation/Foundation.h>
//或者當(dāng)創(chuàng)建視圖椒涯、控制器相關(guān)的類時(shí)
//#import <UIKit/UIKit.h>

這是在頭文件中必不可少的import贩毕,當(dāng)我們認(rèn)為每一個(gè)Person都需要一個(gè)Job時(shí)陈莽,則需要給我們創(chuàng)建的Person類添加一個(gè)實(shí)例對(duì)象

@property (nonatomic,strong) Job *job;

此時(shí)贱傀,若沒有對(duì)Job類進(jìn)行import押桃,則Xcode會(huì)報(bào)錯(cuò)况毅,因?yàn)闊o法識(shí)別Job類型的變量,為了解決上述情況异吻,我們可以在Person的頭文件中添加代碼

#import "Job.h"

盡管這樣可以解決上述情況裹赴,但不夠優(yōu)雅。當(dāng)我們?cè)?h文件中聲明時(shí)诀浪,我們并不需要知道Job的全部信息棋返,只需要知道有這個(gè)類即可。同時(shí)雷猪,這個(gè)適合聲明的話睛竣,若使用者引入了Person.h文件,則也會(huì)引入Job.h文件求摇,倘若所有的類都如此編寫則會(huì)導(dǎo)致引入一些用不到的內(nèi)容射沟,從而增加編譯時(shí)間。

2.向前聲明(forward declaring)

為了解決上面使用import的問題与境,可以使用向前聲明(forward declaring)验夯。

@class Job;

當(dāng)我們向前聲明了Job后,相當(dāng)于告知Xcode在處理Person.h文件時(shí)摔刁,Job是一個(gè)類挥转。當(dāng)我們?cè)?m文件中需要使用到Job的詳細(xì)信息時(shí),再在.m文件中import簸搞。
但是當(dāng)Person類需要遵循Alive協(xié)議(protocal)時(shí)扁位,若使用向前聲明則會(huì)警告

@protocol Alive;
@interface Person : NSObject<Alive> //Cannot find protocol definition for 'Alive'

所以准潭,當(dāng)我們需要遵循某個(gè)協(xié)議時(shí)使用import是無法避免的趁俊,但是為了減少耦合,我們可以創(chuàng)建一個(gè)單獨(dú)OC文件(.h)用來定義協(xié)議刑然。
但是寺擂,當(dāng)我們使用代理(delegate)時(shí),可以不需要像上述一樣聲明泼掠。在與之相關(guān)的類的.m文件中聲明即可怔软,例如給Person類添加一個(gè)Delegate,我們?cè)赑erson.m文件中這樣寫

//Person.m
#import "Person.h"

@protocol PersonDelegate <NSObject>

- (void) walkingOnTheStreet;

@end

@interface Person()

@property (weak,nonatomic) id <PersonDelegate> delegate;

@end

@implementation Person

@end

而這也是apple推薦的寫法择镇,其UITableViewDelegate挡逼、UICollectionViewDelegate等都是采用這種寫法。

2.多使用字面量語法

所謂字面量語法就是在創(chuàng)建對(duì)象時(shí)腻豌,不調(diào)用方法創(chuàng)建對(duì)象家坎。例如

    NSNumber *number1=@1;
    NSNumber *number2=@2.2;
    NSNumber *number3=@1.3;

使用字面量語法可以簡潔明了地創(chuàng)建對(duì)象嘱能,同時(shí)通過在整數(shù)、浮點(diǎn)數(shù)前加@符號(hào)可以便攜地將其轉(zhuǎn)換為NSNumber類型(NSString也可通過在字符串前加@創(chuàng)建)虱疏,供我們使用惹骂。倘若我們調(diào)用方法時(shí),上述代碼需要寫成如下所示做瞪,十分繁瑣效果卻與上述一樣对粪。

    NSNumber *number1=[NSNumber numberWithInt:1];
    NSNumber *number2=[NSNumber numberWithFloat:2.2];
    NSNumber *number3=[NSNumber numberWithFloat:1.3];

除此之外,還有NSArray装蓬、NSDictionary等著拭。下面為NSArray的兩種創(chuàng)建方法

    NSArray *array1=[NSArray arrayWithObjects:object1,object2,object3,nil];
    NSArray *array2=@[object1,object2,object3];

創(chuàng)建array1時(shí),由于arrayWithObjects方法的特殊性矛物,在創(chuàng)建時(shí)object為nil則停止茫死,因此倘若object2為nil的話,array1中則只有object1履羞。而使用字面量語法創(chuàng)建的array2峦萎,若在@[]中的object有一個(gè)為nil則會(huì)報(bào)錯(cuò)。此外忆首,使用objectAtIndex方法獲取數(shù)組中的值時(shí)也可以直接使用下標(biāo)替代爱榔。
對(duì)于NSDictionary,使用dictionaryWithObjectsAndKeys:方法時(shí)糙及,value在key的前面详幽,不夠清晰。相比之下使用字面量語法key與value則十分清晰浸锨。

    NSDictionary *dic1=[NSDictionary dictionaryWithObjectsAndKeys:@"value",@"key",@123,@"number",nil];
    NSDictionary *dic2=@{
        @"key":@"value",
        @"number":@123
    };

因?yàn)橹按赫姓业搅斯ぷ鞔狡福罱厴I(yè)論文也基本完成,因此學(xué)習(xí)了一下Effective Objective-C 2.0柱搜,增強(qiáng)一下自己寫OC代碼的能力迟郎,來為工作做一下準(zhǔn)備。本系列肯定都是由書中相關(guān)的知識(shí)點(diǎn)實(shí)踐后總結(jié)而來聪蘸,更多的是作為筆記的形式宪肖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市健爬,隨后出現(xiàn)的幾起案子控乾,更是在濱河造成了極大的恐慌,老刑警劉巖娜遵,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜕衡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡设拟,警方通過查閱死者的電腦和手機(jī)慨仿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門鸽扁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镶骗,你說我怎么就攤上這事桶现。” “怎么了鼎姊?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵骡和,是天一觀的道長。 經(jīng)常有香客問我相寇,道長慰于,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任唤衫,我火速辦了婚禮婆赠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佳励。我一直安慰自己休里,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布赃承。 她就那樣靜靜地躺著妙黍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞧剖。 梳的紋絲不亂的頭發(fā)上拭嫁,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音抓于,去河邊找鬼做粤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捉撮,可吹牛的內(nèi)容都是我干的怕品。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼呕缭,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼堵泽!你這毒婦竟也來了修己?” 一聲冷哼從身側(cè)響起恢总,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎睬愤,沒想到半個(gè)月后片仿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尤辱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年砂豌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厢岂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阳距,死狀恐怖塔粒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筐摘,我是刑警寧澤卒茬,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站咖熟,受9級(jí)特大地震影響圃酵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜馍管,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一郭赐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧确沸,春花似錦捌锭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽天吓。三九已至逊谋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚁廓,已是汗流浹背雷激。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工替蔬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屎暇。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓承桥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親根悼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凶异,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容