好萊塢電影里經(jīng)常看到黑客們手指在鍵盤上飛速跳躍,同時終端上的代碼也隨著飛舞域蜗。如果你也想像電影里那樣,那么你來對地方了巨双。這篇教程將會教你在Xcode編程中更像程序員,你可以稱之為魔法噪猾、瘋狂的技術(shù)、好運當(dāng)頭或者黑客筑累。毫無疑問,在學(xué)習(xí)完本教程之后,不管你怎么認為,都會感覺很酷,同時能更高效地運用Xcode,甚至可以通過這些新發(fā)現(xiàn)使你的代碼免于毀滅袱蜡。
本章內(nèi)容包括:
開始
日常Xcode任務(wù)
快捷鍵
Xcode的行為
小測驗
加速
讓設(shè)計師高興
提升和超越
代碼片段
何去何從
1.開始
要看起來很酷,所以有一些必不可少的因素.下面列出來的是其中一部分:
(1)快速執(zhí)行任務(wù)
(2)精準(zhǔn)
(3)簡潔美觀的代碼
要表現(xiàn)地更酷,你可以試著不用鼠標(biāo)或者觸摸板來完成教程中的每一個任務(wù)。學(xué)習(xí)之旅將從學(xué)習(xí)一些實用的Xcode功能開始,然后通過修復(fù)一些在CardTilt中的一些bug來訓(xùn)練慢宗。最后你將整理一下你的代碼,使整個界面看起來更整潔坪蚁。在學(xué)習(xí)該教程時,要記住:它不是教你做一個app,而是教你比以前更有效地利用Xcode來開發(fā)app。這篇教程建立在你對Xcode有一個基本的了解的基礎(chǔ)上,然后著重于提高你的工作效率镜沽。每個人都有自己的編程習(xí)慣,本教程并非強制你形成某種風(fēng)格敏晤。自始至終,本教程中你會看到某些命令的替代品,隨著本教程的學(xué)習(xí),請集中精力在提煉和形成你自己的編程風(fēng)格,不要讓微小的錯誤影響你。
Note: 如果你對于Xcode不是很熟悉,建議先學(xué)習(xí)下面兩篇教程缅茉。
下載 CardTilt-starter ,然后就可以愉快地寫代碼了嘴脾。
2.日常Xcode任務(wù)
有一些在Xcode中你經(jīng)常使用的技巧,這一部分讓你更近距離的接觸這些技巧,然后講解一些瀟灑應(yīng)對它們的一些妙招。在這個過程中,你會在這些妙招的基礎(chǔ)上發(fā)現(xiàn)使用它們的新方法蔬墩。這些技巧將成為你編程工具腰帶上的忍者之星译打。在Xcode中打開之前下載好的工程CardTilt,先不要急著去看代碼,先將你Xcode的窗口和下圖來一一對應(yīng)
是不是發(fā)現(xiàn)你的窗口和圖中并不對應(yīng),先別著急。在下面介紹的快捷鍵部分,你將會學(xué)到如何輕松地顯示以及隱藏這些對應(yīng)的窗口拇颅。
下面是組成窗口的每一個獨立區(qū)域的快速瀏覽:
**The Toolbar(工具欄): **你選擇視圖,運行app,在不同布局界面切換的地方
**The Navigation Area(導(dǎo)航區(qū)): **導(dǎo)航你整個工程,警告,報錯等的地方
**The Editing Area(編輯區(qū)): **所有奇跡誕生的地方,包括它上方的Jump bar
**The Utility Area(工具區(qū)): **包含檢測器和一些庫
The Debugging Area(調(diào)試區(qū)): 包括調(diào)試窗口和變量檢測器
上面列出的所有視圖區(qū)域都是Xcode的必要組成部分,它們也是在你開發(fā)過程中可能需要用到的,開發(fā)過程中通常不需要將他們一次性同時顯示出來,下面將介紹一些快捷鍵,將會教你快速顯示/隱藏這些視圖區(qū)域奏司。
3.快捷鍵
在這一部分,你將首先學(xué)到怎么掌握這些快捷鍵,得益于一些模式,最有效的快捷鍵非常容易記。
第一個需要知道的是Xcode的各區(qū)域與修飾鍵的關(guān)系,下面是一個快速瀏覽:
**Control: **編輯區(qū)域上的Jump bar的一些交互
第二個需要知道的時數(shù)字鍵和標(biāo)簽欄的關(guān)系,將數(shù)字鍵和上面提到的修飾鍵組合可以在標(biāo)簽頁之間來回切換蔬蕊。通常數(shù)字鍵對應(yīng)標(biāo)簽頁的索引位置(從1開始),0通常用來顯示/隱藏區(qū)域结澄。它還能再直觀一點嗎?
下面是最常用的組合鍵:
Command 1~ 8: 跳轉(zhuǎn)到導(dǎo)航區(qū)的不同位置
Command 0 :顯示/隱藏導(dǎo)航區(qū)
Command Alt 1~ 6:在不同檢測器之間跳轉(zhuǎn)
Command Alt 0: 顯示/關(guān)閉工具區(qū).
Control Command Alt 1~4: 在不同庫之間跳轉(zhuǎn)
Control 1~ 6: 在Jump bar的不同標(biāo)簽頁的跳轉(zhuǎn)。
最后也是最簡單的就是回車鍵,當(dāng)它和Command組合使用時,可以是你在Xcode中不同編輯器來回切換岸夯。
Command + Enter: 顯示標(biāo)準(zhǔn)單窗口編輯器
Command Alt Enter:你可以猜下它的作用,它的功能是打開Assistant editor
Command Alt Shift Enter: 打開版本控制編輯器
同樣重要的是顯示/隱藏調(diào)試區(qū)的快捷鍵是 Command + Shift + Y ,要記住這個你可以通過這句話來記憶 “Y is my code not working?” (譯者注:Y諧音Why)麻献。如果你忘記了一些快捷鍵,你可以在Xcode的菜單欄Navigate一項中找到大部分快捷鍵。在即將完成這一部分的學(xué)習(xí)之時,你會驚奇的發(fā)現(xiàn)你僅僅只是用了鍵盤就讓Xcode發(fā)生這各種變換猜扮。
4.Xcode的行為
使用快捷鍵來管理Xcode的界面卻是挺棒,有沒有想過更棒的事情?比如讓 Xcode 自動轉(zhuǎn)換到你想看到的界面勉吻。接下來我們將學(xué)到更酷的東西。
幸運的是, Xcode 提供的 Behaviors(行為) 可以讓你輕易地實現(xiàn)上面的事情旅赢。它們是一組定義好的有指定事件觸發(fā)的動作,比如 build 一個工程齿桃。這里的動作的范圍從改變界面到運行一個自定義腳本文件。來看一個例子,快速修改下載好的工程的 CTAppDelegate.m 文件,使其運行時會生成調(diào)試窗口輸出,用下面的方法替代 didFinishLaunchingWithOptions 方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
// Override point for customization after application launch.
NSLog(@"Show me some output!");
return YES;
}
運行程序,然后仔細觀察調(diào)試區(qū),你會發(fā)現(xiàn)調(diào)試區(qū)隨著 app 運行而出現(xiàn),如下所示:
來看看是什么定義了上面的事件,在 Xcode->Behaviors->Edit Behaviors 打開 Behavior 偏好設(shè)置,在左側(cè)你將看到所有事件集合,在右邊是該事件可以觸發(fā)的一些列動作煮盼。點擊 Running 欄下的 Generates output,然后發(fā)現(xiàn)它被設(shè)置成用來顯示調(diào)試區(qū)短纵。
4.1 一些推薦的行為
**Note: **根據(jù)你的開發(fā)環(huán)境,我推薦的兩種不同的Generates output
事件觸發(fā)動作集。如果你有多個屏幕,試著使用第一種,如果是單顯示器,試著調(diào)到第二種方法僵控。
4.1.1 方法一
如果你在兩個或者多個屏幕上開發(fā),把調(diào)試區(qū)放到第二屏幕是不是更加方便,你可以向下面這樣設(shè)置
現(xiàn)在,運行程序,然后你會看到一個分離的窗口出現(xiàn),將它放到你的第二屏幕上,是不是效率高了不少?
4.1.2 方法二
如果是單屏,通過隱藏工具板以及設(shè)置輸出窗口占據(jù)整個調(diào)試區(qū)使輸出窗口的有效區(qū)域最大化,設(shè)置如下
然后運行程序,然后觀察 Xcode ,看它是不是按照你的命令在執(zhí)行香到。
當(dāng)程序暫停的時候,你可能也想改變 Xcode 的行為,到 Running 欄下的 Pauses 事件,然后改變其設(shè)置,向下面這樣:
現(xiàn)在無論何時你設(shè)置了斷點,你將會得到一個新的名為fix的展示變量和輸出窗口的標(biāo)簽頁,然后自動導(dǎo)航到第一個issue。
你將要創(chuàng)建的最后一個行為是我個人最喜歡的一個,它是一個自定義行為—設(shè)置一個快捷鍵。當(dāng)被觸發(fā)的時候,它使 Xcode 轉(zhuǎn)變到我指定的為下一次開發(fā)而優(yōu)化的布局,名為 Dev Mode悠就。我們可以通過點擊Behavior偏好設(shè)置的左下角的“+”,然后將其取名為Dev Mode,雙擊 Dev Mode 右邊的符號然后輸入 Command . 來定義一個快捷鍵千绪。
接下來為該事件設(shè)置相應(yīng)動作:
現(xiàn)在,只要你按下command .就會觸發(fā)上面設(shè)置的動作,即出現(xiàn)一個相同的整潔的開發(fā)界面。
下面將介紹 Xcode tab name,和行為配合起來使用堪稱完美梗脾。
**Note: **Xcode Tab Names(Xcode標(biāo)簽名):可以通過雙擊標(biāo)簽頁的標(biāo)題來修改標(biāo)簽頁的名稱,對于它本身來說是一個無用的功能,但是當(dāng)它和行為結(jié)合起來使用時就變得非常強大了荸型。在上面的第二個例子中,當(dāng)改變Pauses行為時,命名了一個叫fix的標(biāo)簽頁,這就意味著當(dāng)行為被觸發(fā)時,Xcode將會使用fix標(biāo)簽頁(如果存在),如果不存在,它會新建一個名為fix的標(biāo)簽頁。另一個例子就是多屏Starts行為,如果一個名為Debug的標(biāo)簽頁在之前運行時被打開,它將會復(fù)用這個標(biāo)簽頁而不是重新創(chuàng)建一個炸茧。用這種方式,你可以創(chuàng)建非常有趣的行為瑞妇。
到現(xiàn)在為止,我們可以花點時間來回顧一下剛才的行為,不要著急,本教程會等著你。
5.小測驗
在接下來的部分,你將在測驗中用到上面所學(xué)到的技巧,然后在CardTilt項目中學(xué)到一些新的技巧宇立。
運行CardTilt項目中踪宠,你看到如下畫面
它不是你期待看到的畫面?是時候消滅這些bug了妈嘹!
5.1鎖定bug
app似乎在加載數(shù)據(jù)時出現(xiàn)了問題柳琢,你的任務(wù)就是消滅它們。打開 CTMainViewController.m 文件然后進入開發(fā)模式 Dev Mode润脸,快捷鍵為之前設(shè)置的 command .柬脸。注意 viewDidload 方法中的前幾行
self.dataSource = [[CTTableViewDataSource alloc] init];
self.view.dataSource = self.dataSource;
self.view.delegate = self;
看起來 CTTableViewDataSource 實現(xiàn)了 UITableViewDataSource 協(xié)議,為 tableview 提供了數(shù)據(jù)毙驯。是時候展現(xiàn)你 Xcode 的技術(shù)了倒堕,按住 command 鍵,同時點擊 CTTableViewDataSource 在編輯器中打開CTTableViewDataSource.h爆价。CTTableViewDataSource.m 應(yīng)該已經(jīng)在你的 Assistant Editor垦巴,如果不是這樣的話,打開頂部的 Jump Bar铭段,像下圖一一樣切換到 Assistant Editor 的 counterparts 模式骤宣。
翻看代碼,你會發(fā)現(xiàn)數(shù)組 members 裝載數(shù)據(jù)序愚,loadData 方法從 bundle 中加載數(shù)據(jù)至數(shù)組 members憔披。在assistant editor 右邊任意位置鼠標(biāo)右擊,選擇 Open in Primary Editor爸吮,就會在 Primary Editor 中打開 CTTableViewDataSource.m 文件芬膝,下面動畫是該步驟的展示:
Note: 為了看起來更酷炫,你可以在不用鼠標(biāo)的情況下完成上面的所有事情形娇,步驟如下:
1.同時按住Command + Shift + O锰霜,在輸入框中輸入CTMainViewController.m,然后回車來打開該文件桐早。
2.Command + . 進入Enter Dev模式 锈遥。
3.將鼠標(biāo)放在 CTTableViewDataSource 上纫事,然后按住Command + Control + J,跳轉(zhuǎn)至CTTableViewDataSource定義處所灸。
4.按住 Command + J, -> 然后按下回車,來轉(zhuǎn)換 assistant editor 的焦點
5.按住 ctrl +4 來下拉 Jump Bar炫七,然后使用方向鍵和回車鍵來選擇 counterparts
6.按住 Command + Alt爬立,在 primary editor 中打開 CTTableViewDataSource.m 文件
7.上面的結(jié)果步驟看起來不呢么高效,但是它讓你看起來很酷万哪。
5.2 修復(fù)bug
在 self.members = json[@"Team"]; 打上斷點來確定數(shù)據(jù)是否都被裝載到數(shù)組 members 當(dāng)中侠驯,然后運行程序。
如果對于基本的設(shè)置斷點和調(diào)試不太熟悉奕巍,可以先看看這篇教程吟策。
就像你之前在 Xcode 行為看到的一樣,Generates output 將首先被觸發(fā)的止,緊接著Pause行為被觸發(fā)檩坚。因為你之前在 Pause 有過自定義設(shè)置,所以 Xcode 會新建一個名為 fix 的標(biāo)簽頁诅福,它專為調(diào)試而設(shè)匾委。
將目光切換到變量檢測器variable inspector,你會發(fā)現(xiàn)數(shù)組members是nil氓润,在loadData方法數(shù)組members被填充赂乐,代碼如下
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
self.members = json[@"Team"];
在變量檢測器中查看json,看其是否被正確加載咖气,你會發(fā)現(xiàn)數(shù)據(jù)中的第一個值是 @"RWTeam" 而不是 @"Team" 挨措,當(dāng)加載數(shù)組 members 時,這個值是錯的崩溪,找到了一個bug浅役。
讓我們按下面步驟來修復(fù)這個bug:
(1)使用 Command + .來進入開發(fā)模式
(2)按住 Command + Option + J跳至filter bar然后輸入 teammember
(3)然后按住Alt同時點擊 TeamMembers.json 在 assistant editor 來打開它
(4)最后,使用 "Team" 來替換 "RWTeam"
下圖是上面四步的一個動畫
現(xiàn)在移除斷點悯舟,然后運行程序担租,它看起來應(yīng)該像這個樣子。
是不是看起來比之前要好一點了抵怎,但是還是有一些bug奋救,比如Ray和Brian的標(biāo)題描述欄不見了。接下來我們通過修復(fù)這些bug來學(xué)到更多酷炫的技巧反惕。
6.加速
你應(yīng)該已經(jīng)知道 UITableViewCells 在 tableView:cellForRowAtIndexPath: 方法中被加載尝艘,所以用 Open Quickly 來導(dǎo)航到該方法,然后按照下面步驟:
(1)按下Command + Shift + O來呼出 Open Quickly
(2)輸入cellForRow
(3)按下回車來打開它
按住 command 然后點擊 setupWithDictionary 來跳轉(zhuǎn)至其定義處姿染,然后你會發(fā)現(xiàn)一些用來加載描述的代碼
NSString *aboutText = dictionary[@"about"]; // Should this be aboot?
self.aboutLabel.text = [aboutText stringByReplacingOccurrencesOfString:@"\n" withString:@"\n"];
它使用 dictionary[@"about"] 中的數(shù)據(jù)來加載 label背亥。
接下來呼出 Open Quickly秒际,然后打開 TeamMembers.json,使用 alt + command 在 Assistant Editor 中打開狡汉。檢查 about 的值娄徊,然后你會發(fā)現(xiàn)有人將 about 拼寫成了 aboot,我們可以使用全局的Find and Replace 來修復(fù)這個bug盾戴。當(dāng)然你可以在文件中直接做這件事寄锐,但是使用 find navigate 看起來更酷。打開 find navigate尖啡,然后通過頂部的 jump bar 切換到替換(replace)模式橄仆,輸入aboot,然后回車。
在 TeamMembers.json 文件之外還有一個地方使用到了aboot,別擔(dān)心,選中 CTCardCell.m 的搜索結(jié)果玖媚,然后按下 Delete秆撮,將鼠標(biāo)移至 replace filed,然后輸入about,點擊 Replace All,一切完成。整個過程看起來是這個樣子的:
**Note: **進階技巧:使用 Command + Shift + Option + F 來打開 Find navigator 的替換模式蚕涤,如果你嫌麻煩,也可以使用 Command + Shift + F 來打開 Find navigator 的查找模式铣猩,如果你還嫌麻煩揖铜,使用 command + 3 來打開 Find navigator,然后開啟查找或者替換模式达皿,選擇一種最適合自己的方式就好天吓。
運行程序,看起來是這樣的
7.讓設(shè)計師高興
今天的調(diào)試任務(wù)到此就結(jié)束了峦椰,給自己一點掌聲龄寞,然后開始運行程序。在你將它展示給別人之前汤功,需要先確定app的界面是完美的物邑。尤其當(dāng)這個人是非常認真的設(shè)計師的時候,這一部分教你一些關(guān)于interface builder的技巧滔金,讓你變得更酷色解。
打開 Mainstoryboard.storyboard,通常你想在打開 interface builder 的同時打開 standard editor 和工具區(qū)(utilities area)餐茵,所以我們可以自定義一個新的叫做 IB Mode 的行為科阎,當(dāng)你在看下面的自定義發(fā)放之前,試著自己創(chuàng)建一個然后自定義忿族,不必要完全一致锣笨。
我將這個模式的快捷鍵設(shè)置為Command Option .蝌矛,現(xiàn)在你將看到一個舒服的 Interface Builder 界面,看看 CTCardCell错英。首先你想讓 mainView 處于 ContentView 的正中央入撒。有兩種技巧可以完成這個需求:
按住Control + Shift,然后在 mainView 的任意位置鼠標(biāo)左擊走趋,你將看到一個彈出視圖讓你選擇在光標(biāo)下的所有視圖衅金,如下圖所示:
這個方法讓你輕松的就能選中 mainView,盡管 cardbg 遮住了它簿煌。選中 mainView 之后,按住Alt然后在 ContentView 的邊緣移動鼠標(biāo)鉴吹,來看它們之間的間隔姨伟。下面是這個過程的一個動畫:
原來對其并不是那么優(yōu)雅,看起來也不是很酷豆励。為了解決這個夺荒,我們可以調(diào)整視圖的大小。點擊Editor->Canvas->Live Autoresizing來使子視圖在父視圖尺寸改變的時候強制調(diào)整大小良蒸。按住Alt同時拖拽mainView的一角技扼,直到每邊的距離為15.
Note: 拖拽是像素點級別的技巧,你可以嘗試不同的調(diào)整的處理方法嫩痰,就像下面動畫一樣剿吻。在很多情況下,更傾向于使用Size Inspector
來調(diào)整復(fù)雜的布局串纺,而非用鼠標(biāo)來拖拽丽旅。
試著使用相同的技巧來對齊titleLabel、locationLabel纺棺、aboutLabel,讓他們豎直方向上的間隔為0榄笙。按住Alt來查看鼠標(biāo)移動時,三個label之間的間隔祷蝌。有發(fā)現(xiàn)三個label的左邊緣并沒有對齊嗎茅撞?設(shè)計師肯定想讓nameLabel和webLabel靠左對齊。使用Vertical Guide可以昂我們輕松完成這個任務(wù)巨朦。選中cardbg米丘,然后點擊菜單欄的Editor->Add Vertical Guide,這個步驟的快捷鍵是Command |罪郊,horizontal guide的快捷鍵是Command -蠕蚜,這兩個快捷鍵是最可視化的。當(dāng)視圖上有了vertical guide之后悔橄,將其從cardbg的左邊緣拖10個點靶累。然后所有視圖將會緊貼vertical guide腺毫,對的非常整齊,繼續(xù)為其他的label進行對其操作挣柬。
Note: Xcode并不那么完美潮酒,有時候可能在你創(chuàng)建guideline的時候出現(xiàn)一些問題,可以打開其他文件然后再切回到storyboard頁面邪蛔,然后storyboard會被重新加載急黎,這個時候問題一般會自動解決。
讓你更酷的建議:所有的視圖能緊貼在guideline上才是最好的侧到,guideline沒有必要在同一個層級勃教。
下圖是上面對齊過程的一個回放:
我敢打賭你現(xiàn)在迫不及待的想把你做的展示給你的設(shè)計師看!
8.提升和超越
上面的步驟讓你得到了一個實用的app匠抗,同時讓你的設(shè)計師也感到很滿意故源,那么接下來我們要做的就是讓代碼變得更為簡潔。
快速打開(Command + Shift + O)CTCardCell.m汞贸,記得進入Dev Mode(Command .)绳军,你應(yīng)該不會忘了這些快捷鍵吧。
看下 CTCardCell.m 頂部凌亂的屬性列表
@property (weak, nonatomic) IBOutlet UILabel *locationLabel;
@property (strong, nonatomic) NSString *website;
@property (weak, nonatomic) IBOutlet UIButton *fbButton;
@property (weak, nonatomic) IBOutlet UIImageView *fbImage;
@property (strong, nonatomic) NSString *twitter;
@property (weak, nonatomic) IBOutlet UIButton *twButton;
@property (weak, nonatomic) IBOutlet UILabel *webLabel;
@property (weak, nonatomic) IBOutlet UIImageView *profilePhoto;
@property (strong, nonatomic) NSString *facebook;
@property (weak, nonatomic) IBOutlet UIImageView *twImage;
@property (weak, nonatomic) IBOutlet UILabel *aboutLabel;
@property (weak, nonatomic) IBOutlet UIButton *webButton;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
在這部分矢腻,你將創(chuàng)建一個自定義服務(wù)以執(zhí)行腳本命令來實現(xiàn)屬性的快速整齊地排列门驾。
Note: 如果對于這些腳本命令還不熟悉,它們是相當(dāng)好理解的多柑。排序(sort)是按照字母順序來的奶是,uniq
是會刪除所有重復(fù)的行數(shù)。uniq
在這里可能派不上用場顷蟆,但是用它來管理#import
诫隅,那是極好的。
Mac OS X允許你創(chuàng)建整個操作系統(tǒng)全局通用的服務(wù)帐偎,你將用它來創(chuàng)建一個用在Xcode中的腳本服務(wù)逐纬,按如下步驟來設(shè)置:
(1)使用Spotlight來搜索Automator,并打開它
(2)然后點擊File->New削樊,并選擇服務(wù)(service)一項
(3)在Actions篩選欄豁生,輸入shell,然后雙擊運行shell腳本Run Shell Script
(4)在新添加的服務(wù)的菜單欄上,檢查Output replaces selected text
(5)將腳本內(nèi)容切換至sort | uniq
(6)同時按下command s漫贞,將服務(wù)保存為 Sort & Uniq
最終的窗口看起來是這個樣子:
切回到Xcode甸箱,然后選中 CTCardCell.m 中的那片混亂的屬性區(qū)域,右擊迅脐,選擇 Services -> Sort & Uniq芍殖,然后觀察執(zhí)行之后代碼是多么的整潔。你可以看下面的一個示意圖:
9.代碼片段
進行到這里谴蔑,意味著那些基本的可以讓你看起來酷酷的調(diào)試任務(wù)已經(jīng)告一段落了豌骏,接下來我希望你覺得更酷龟梦。你可定想學(xué)更多技巧,幸運的是窃躲,這是最后分享的一個技巧计贰。
你之前可能已經(jīng)使用過Xcode的代碼片段(Code Snippets)功能了,一些常見的是for in片段和dispatch_after片段蒂窒。在這一部分躁倒,你將學(xué)會如何創(chuàng)建自定義的代碼片段,當(dāng)你重用這些代碼片段時洒琢,看起來非常棒秧秉。你將創(chuàng)建的是獲取單例的代碼片段。
如果你不熟悉單例模式衰抑,可以看看這個教程福贞。
下面可能是你使用單例模式的常用代碼模板
- (instancetype)sharedObject {
static id _sharedInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedInstance = [[self alloc] init];
});
return _sharedInstance;
}
非常酷的是這份片段也包含了dispatch_oncep片段停士。
在工程CardTilt創(chuàng)建一個名為繼承自NSObject名為SingletonObject的新類,你不需要為它做任何事完丽,除了作為拖拽代碼片段的一個地方恋技。
按下面步驟:
(1)在 @implementation 的下一行粘貼上面的代碼到 SingletonObject.m
(2)用快捷鍵Command Option Control 2來打開代碼片段庫,在代碼片段庫中你會看到默認的包含在Xcode中的代碼片段庫逻族。
(3)選中整個+sharedObject方法蜻底,將其拖拽到代碼片段庫中。
看起來是這樣的:
新創(chuàng)建的代碼片段將會在代碼片段庫的最底部聘鳞,你可以將其拖拽到任何你想拖拽的文件當(dāng)中去薄辅,讓我們來嘗試一下。
雙擊剛剛新建的代碼片段抠璃,然后點擊edit.彈出的視圖非常使用站楚,實際上它們都很重要,所以做個簡短的解釋搏嗡。
(1)Title and Summary:代碼片段庫中該代碼片段的名字和簡述
(2)Platform and Language:代碼片段匹配的平臺和編程語言
(3)Completion Shortcut:在Xcode中輸入的快捷鍵
(4)Completion Scopes:代碼片段作用的范圍窿春,這對于保持代碼片段庫整潔來說十極好的。
向下面一樣填充里面的屬性:
9.1令牌
當(dāng)你加入令牌時采盒,代碼片段將會變得非常強大旧乞,因為它允許你在片段中標(biāo)記代碼,而不需要硬編碼磅氨。通過使用Tab鍵使得他們非常容易修改尺栖,就像自動補全一樣。
在片段中僅僅只要輸入 <#TokenName#> 就可以添加一個令牌烦租,創(chuàng)建一個令牌使用 shared<#ObjectName#>替代sharedObject 延赌,看起來像這樣:
點擊 Done 來保存該片段除盏,然后來用用它。
在 SingletonObject.m 文件中輸入 singleton accessor皮胡,然后當(dāng)它出現(xiàn)的時候使用自動補全
對于經(jīng)常使用的代碼來說痴颊,創(chuàng)建一個代碼片段是非常實用的。
10.何去何從
總結(jié)一下在這個教程中你所學(xué)到的東西:
(1)使用快捷鍵來改變Xcode的布局
(2)使用自定義的行為來改變Xcode的布局
(3)使用assistant editor
(4)在Xcode中快速打開某文件
(5)在Find navigator刪除搜索到的結(jié)果
(6)在Interface Builder使用快捷鍵和guideline來對齊視圖
(7)創(chuàng)建一個在Xcode中使用的服務(wù)
(8)創(chuàng)建并使用自定義的代碼片段
(9)最重要的是你知道怎么去成為一名Xcode大師
上面列出來的內(nèi)容都很簡單對吧屡贺?在你的朋友面前展示這些炫酷的技巧蠢棱,你的朋友一定會驚呆也會理解你的興奮。還有很多方法可以提高你的Xcode的效率甩栈,比如:
使用Doxygen風(fēng)格的注釋
使用Xcode插件
下一步就是去尋找新的酷炫的技巧泻仙,我希望你能享受整個教程的學(xué)習(xí)過程,如果你有任何問題量没、評論玉转、或者想分享你所知道的炫酷技巧,請在下面評論中指出殴蹄。