簡體   English   中英

int vs NSNumber vs NSInteger

[英]int vs NSNumber vs NSInteger

我有一行代碼將根據數據類型“day”和“1”的不同而有所不同。 我相信它是以下,雖然我稍后會檢查我的源代碼。

day = day + 1;

這有意義嗎? 差異會是什么?

NSInteger是一個描述整數的類型定義 - 但它不等同於64位平台上的int
您可以通過cmd單擊Xco​​de中的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是文字,如果合適,編譯器將使其成為合適的數字類型。

但請注意,盡管NSIntegerint對於大多數意圖和目的都是相同的,但NSNumber是一種對象類型。 對於這種情況,您的代碼沒有意義(並且不應該在沒有警告的情況下編譯)。

(實際上,在一些情況下,它會在指針算術方面產生某種意義,但這完全不是你想要的。)

對於NSNumber案例​​,您需要以下內容:

day = [NSNumber numberWithInt:[day intValue] + 1];

NSIntegerint是等價的, NSNumber是用於存儲基本數字類型(int,long,float等)的對象。

你發布的示例代碼如果dayNSinteger就可以正常工作,如果它是NSNumber則根本不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM