02 - xcode使用

好萊塢電影里經(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í)下面兩篇教程缅茉。

教程1教程2

下載 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)系,下面是一個快速瀏覽:

用來導(dǎo)航,控制導(dǎo)航區(qū)域
控制右邊的一些東西,比如Assistant Editor,utility editor
**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í)過程,如果你有任何問題量没、評論玉转、或者想分享你所知道的炫酷技巧,請在下面評論中指出殴蹄。

http://www.cocoachina.com/ios/20140731/9284.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末究抓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子袭灯,更是在濱河造成了極大的恐慌刺下,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稽荧,死亡現(xiàn)場離奇詭異橘茉,居然都是意外死亡,警方通過查閱死者的電腦和手機姨丈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門畅卓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蟋恬,你說我怎么就攤上這事翁潘。” “怎么了筋现?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵唐础,是天一觀的道長。 經(jīng)常有香客問我矾飞,道長一膨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任洒沦,我火速辦了婚禮豹绪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己瞒津,他們只是感情好蝉衣,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巷蚪,像睡著了一般病毡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屁柏,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天啦膜,我揣著相機與錄音,去河邊找鬼淌喻。 笑死僧家,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裸删。 我是一名探鬼主播八拱,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涯塔!你這毒婦竟也來了肌稻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤匕荸,失蹤者是張志新(化名)和其女友劉穎灯萍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體每聪,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年齿风,在試婚紗的時候發(fā)現(xiàn)自己被綠了药薯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡救斑,死狀恐怖童本,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脸候,我是刑警寧澤穷娱,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站运沦,受9級特大地震影響泵额,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜携添,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一嫁盲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烈掠,春花似錦羞秤、人聲如沸缸托。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俐镐。三九已至,卻和暖如春哺哼,著一層夾襖步出監(jiān)牢的瞬間佩抹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工幸斥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留匹摇,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓甲葬,卻偏偏與公主長得像廊勃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子经窖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

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

  • 【轉(zhuǎn)載】曾夢想仗劍走天涯 1.Xcode IDE概覽 說明:從左到右坡垫,依次是“導(dǎo)航窗格(Navigator)->邊...
    06a6a973d7ab閱讀 3,835評論 2 20
  • 1.Xcode IDE概覽 說明:從左到右,依次是“導(dǎo)航窗格(Navigator)->邊列(Gutter)->焦點...
    小地閱讀 5,364評論 0 9
  • 在Xcode 6中有許多快捷鍵的設(shè)定可以使得你的編程工作更為高效画侣,對于在代碼文件中快速導(dǎo)航冰悠、定位Bug以及新增應(yīng)用...
    PlatonsDream閱讀 19,029評論 1 11
  • 因為要結(jié)局swift3.0中引用snapKit的問題,看到一篇介紹Xcode8,swift3變化的文章,覺得很詳細...
    uniapp閱讀 4,416評論 0 12
  • 踏著回鄉(xiāng)的步履,心里微波蕩漾著激動配乱,無聊之中又蘊含著一絲絲愜意溉卓,不知道故鄉(xiāng)有沒有什么變化,思索著自己在家里種的幾株...
    颯颯華風(fēng)閱讀 293評論 0 0