2011-01-05 35 views
3

對不起,如果這聽起來像是一個noobie問題,我還是比較新的ObjC和iOS,但不是新的軟件開發,但是,當閱讀文件/觀看各種視頻話題,我聽到某些我不確定的短語,有人可能花一點時間對以下術語進行簡短的描述 - 或者指出我對他們有很好的參考。術語問題Objective-C/iOS

我會在下面列出我堅持使用的術語以及我認爲我認爲它是/的意思和任何幫助糾正我所以我可以更好地跟蹤蘋果文檔的流程將深表讚賞。

1)的Singleton

可能類似於在PHP全靜態類,沒有實例方法

2)模型,視圖,控制器(MVC)的組織 - 特異性的 '模型' 部件

我知道廣義的定義是保持單獨的東西,我認爲這等同於你的視圖是你構建的以編程方式或在界面構建器中輸出到屏幕上的,控制器將是處理消息的代碼(點擊,點擊等等)從視圖,並將信息推入視圖,雖然在很多情況下構成視圖和控制器的.xib和.h/.m對是同一族(即MyViewController.h/.m/.xib)的一部分。在我的猜測中,這個模型是單獨的處理程序,用於從源讀取數據或將數據寫入數據源,例如,發送消息的類可以從SQLite數據庫或從XML源加載和返回數據並對其進行處理。

3)在討論對象類型時,*的正確位置在哪裏?

我知道*指的是指針,但我已經看到的東西寫的下面,看上去就像他們的意思是一樣的東西:

NSString *myVar; 
NSString* myVar; 
NSString * myVar; 

我明白*進去的消息標題,例如類型後:

- (void)myMessageHandler:(NSString *)str; 

4)什麼時候使用NSInteger而不是簡單的int?

這可能會讓我看起來像一個白癡,但我不得不問它,因爲我不知道什麼時候使用哪一個,我看到很多不同的例子混合在一起。

5)可重複使用的實體標識符

當解除queing /創建通過再利用隊列的工作目的,我看到每個時間(例如,對於一個UITableViewCell使用的相同的相同標識符,@「cellIdentifier」)。但是,我所看到的是,每次都使用相關的行數據重置單元格,而不是簡單地將其存儲在隊列中,這種混淆來自HTML中用於處理每行的表格,您可以遍歷DOM或將ID標記添加到每行都是唯一的。

我認爲這是一個內存管理的事情,如果你使用的是默認類,你不會真正注意到發生了什麼,但是如果你使用了不同的自定義類,我假設你想實例化每種類型只有每個父類實例(例如UITableView),以便即使每次重置屬性,所需的總內存都是最小的,並且實例化時間從循環中取出,因爲您只需執行一次?

這個問題的第2部分將是如果我有一個應用程序,其中有多個視圖控制器互相推送,是否明智使用與特定視圖相關的唯一標識符,所以如果我使用自定義子類,標識符不會導致重疊並且可能會導致內存泄漏。例如,如果我在兩個UITableView中使用「cellIdenfier」作爲我的可重用身份名稱,但第二個使用UITableViewCell的自定義類,當我返回時,UITableView將推入一個推送UITableView的地圖到頂視圖時,系統在出隊時是否可能不會返回我錯誤的類型並導致稍微奇怪的輸出?

+2

您應該一次只發佈一個問題,因爲它違背了Stack Overflow作爲資源的特性。 :-) – 2011-01-05 13:15:57

+0

道歉,我以爲我會用5個同步帖子弄亂系統,但我認爲你的觀點將它們組合在一起可能不會吸引具有所需技能的用戶來完全回答問題。我會記住將來會做單獨的帖子。 – JamesB 2011-01-05 13:19:11

+1

在回答問題3時,他們中的任何一個都沒問題。我更喜歡它的名稱旁邊的右側,因爲我將它的名稱與其類型相比是更多的指針。 – 2011-01-05 14:19:58

回答

1

正如middaparka所說,你應該分開問題,但我可以回答1-3。

單例是一種設計模式,意味着整個程序中只有一個類的實例。它通常使用靜態getInstance方法實現,該方法要麼返回現有實例(存儲爲靜態變量),要麼創建一個新的實例(如果實例不存在)。任何關於設計模式的好的參考都應該解決它。

對於MVC,您對模型的想法基本上是正確的。該模型是數據存儲的地方。再次,請查看設計模式參考以瞭解詳細信息。

至於*在哪裏,這在很大程度上是一個風格問題,因爲編譯器會接受任何方法。我個人更喜歡把它放在類型的旁邊,因爲它在技術上是類型的一部分,但是我工作的大多數地方都把它放在標識符的旁邊。我相信把它放在標識符旁邊的基本原理是,*的其他用途之一是取消引用一個指針,在這種情況下,將它與變量分組是有意義的,並且他們希望使它看起來一致。當用作乘法運算符時,我只看到*周圍的空格。

+0

謝謝卡爾,這清除了一些泥土,我會採納你的建議,並重新發布4和5後作爲單獨的問題,並會做一些搜索mvc設計模式,以進一步閱讀。我也完全理解現在需要分裂問題,因爲其他讀者尋找答案可能會發現這條鏈很難遵循。我的朋友經驗豐富。 – JamesB 2011-01-05 15:05:13

+0

@JamesB:當你重新發布這些部分時,不要忘記在這裏刪除它們,這樣人們可以很容易地找到有用答案的地方。 – 2011-01-05 17:27:30

3

即使您已接受答案,因爲它不完整,我會加入它。

就我而言,Karl的單身人士的定義就在錢上。

該模型不僅僅是存儲數據的對象,它也是業務邏輯。

至於在哪裏*,是的,這是一個風格的問題,但它是C(其中Objective-C是一個超集)類型的一部分是微妙的不正確的。這很容易用下面的證明:

int* foo, bar; 

它不申報int*類型的兩個變量,但一個指向一個int(富)和int(巴)。所以在技術上你應該把變量名*。但是,我使用與Karl相同的約定,並且從不以逗號分隔的列表中聲明變量來避免上述問題。

何時使用NSInteger而不是簡單的int?

任何時候Cocoa API文檔都應該使用它。否則,使用它與純int相比絕對沒有優勢。如果您需要保證int類型的特定寬度,則應使用stdint.h(int32_t,int64_t等)中的C99標準寬度。如果你不需要保證一定的寬度,你可以使用內置類型,除非Cocoa API給你一個NS(U)整數。將NS(U)整數轉換爲(無符號)整型會在某些體系結構(例如x86_64)上截斷它。

可重複使用的實體標識符

一個UITableView需要爲每一個細胞是在屏幕上當前可見的一個實例。實例化一個單元格可能會很昂貴(例如,您可能需要到磁盤加載NIB),因此,一旦它們離開視圖,表格視圖就會將它們放入放棄的單元格的隊列中,而不是丟棄單元格。當你需要一個新的單元時,將一個未使用的單元從這個隊列中拉出來比從頭開始實例化要快得多。

重用標識符是必需的,因爲您的表視圖可能包含不同類型的單元格。例如一行可能有文本字段,另一行可能有日期選擇器。所以如果表格視圖請求一個文本行的單元格,那麼給它一個帶日期選擇器的單元格並不好。

+0

神奇的,所以,爲了確保我理解,NSInteger與int,如果實例方法,委託協議等指定NSInteger,請使用它,否則,我選擇。對於標識符,如果表中的所有單元格都是相同的,那麼相同的標識符就可以,如果它們適用於不同類型的數據或視圖,則使用不同的標識符。如果我是對的,那是完美的。 – JamesB 2011-01-05 18:05:42

+0

@JamesB:都正確。 – JeremyP 2011-01-06 08:56:31