2012-01-18 177 views
0

嗨,我有一個簡單的問題,究竟是什麼方法是最好的選擇:傳遞數參數方法

類產品

- (NSMutableArray*)getAllProductsByCategory:(NSInteger)categoryID 
{ 
    ................. 
    sqlite3_bind_int(statement, 1, categoryID); 
    ................. 
} 

file.h

@interface ListViewController : UITableViewController { 
    NSInteger *number; 
} 

file.m

// with NSInteger: incompatible pointer to integer conversion 
self.listArray = [dbAccess getAllProductsByCategy:number]; 

什麼是最好的町冰爲傳遞一個簡單的整數參數方法:NSInteger,NSNumber或簡單的int ??

回答

0

最好使用NSInteger。根據您使用的處理器架構,有些東西在使用時會針對您進行優化。看到這個問題的更多信息:When to use NSInteger vs. int

+0

好吧,THK。一個問題:我必須爲nsinteger設置一個屬性? @屬性(保留,非原子)NSInteger *數字; – Maurizio 2012-01-18 14:13:48

+0

這取決於你正在使用它。你當然可以爲它設置一個屬性,但由於它不是一個對象 - 它不會是「保留」的非原子。 – dtuckernet 2012-01-18 14:16:06

+0

如果你想具體,它將是'assign'而不是'retain'。 – deanWombourne 2012-01-18 14:19:46

0

NSInteger - 這只是typedef的int。 NSNumber - 是正常的Objective-C類。 如果你想按照慣常的方式調用方法:[self method:myInt],你可以使用你想要的,但是如果你要在延遲或其他線程中執行選擇器,我必須使用NSNumber,因爲不可能爲選擇器發送非類對象。
但通常我在所有使用Cocoa框架的代碼中使用NSIntegerNSUInteger(無符號整數),在使用C語言編寫的代碼中使用int,unsigned int

+0

如果我使用NSInteger如何將其轉換爲我的方法: self.listArray = [dbAccess getAllProductsByCategy:number]; 不兼容的整數轉換指針 – Maurizio 2012-01-18 14:18:00

+0

'NSNumber * myNumber = [NSNumber numberWithNSInteger:number];' – OdNairy 2012-01-18 14:36:28

0

NSNumbers是非常沒用的,除了存儲在數組或字典,你必須使用一個對象。你不能和他們做數學計算,他們使用更多的內存和處理時間來產生和操作,而不是普通的整數。 NSInteger是一個不錯的選擇。

你可能不希望NSInteger是一個指針,因爲它不是一個對象,它只是int的另一個詞。因此,而不是

NSInteger *number; 

NSInteger number;