[英]int vs NSNumber vs NSInteger
我有一行代碼將根據數據類型“day”和“1”的不同而有所不同。 我相信它是以下,雖然我稍后會檢查我的源代碼。
day = day + 1;
這有意義嗎? 差異會是什么?
NSInteger
是一個描述整數的類型定義 - 但它不等同於64位平台上的int
。
您可以通過cmd單擊Xcode中的NSInteger
來檢查typedef。
NSInteger
被定義為int
建立一個32位的應用程序和當long
為64位應用程序。
大多數情況下,您可以使用NSInteger替換int,但在執行此操作時需要考慮一些事項。
Apple的64位Cocoa過渡指南提供了一些相關信息。
NSNumber是一個可以幫助您將數字類型存儲為對象的類。 它具有在不同類型和方法之間進行轉換的方法,以檢索數值的字符串表示形式。
如果您使用類型NSNumber*
的變量day
,就像您在示例中所做的那樣,您不會修改day
的值,而是修改其內存地址。
如果您正在處理時間值,您還可以查看NSDate 。
NSInteger
只是一個整數, NSNumber
是一個對象,其中int
是原始數據類型。
NSInteger只不過是一個長整數的同義詞。
如果您需要在某處存儲號碼,請使用NSNumber。 如果您正在進行計算,循環等,請使用NSInteger,NSUInteger或int。
您可以使用以下命令將NSInteger包裝到NSNumber中:
NSNumber *NumberToStore = @(21);
並使用以下方式恢復
NSInteger retrievingInteger = [NumberToStore integerValue];
1
是文字,如果合適,編譯器將使其成為合適的數字類型。
但請注意,盡管NSInteger
和int
對於大多數意圖和目的都是相同的,但NSNumber
是一種對象類型。 對於這種情況,您的代碼沒有意義(並且不應該在沒有警告的情況下編譯)。
(實際上,在一些情況下,它會在指針算術方面產生某種意義,但這完全不是你想要的。)
對於NSNumber案例,您需要以下內容:
day = [NSNumber numberWithInt:[day intValue] + 1];
NSInteger
和int
是等價的, NSNumber
是用於存儲基本數字類型(int,long,float等)的對象。
你發布的示例代碼如果day
是NSinteger
就可以正常工作,如果它是NSNumber
則根本不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.