簡體   English   中英

正確將32位方法更新為64位支持

[英]Proper updating of a 32bit method to 64bit support

我有一種方法正在嘗試更新對我的應用程序的64位支持。 我有很多這樣的warnings

問題出在以下示例中。 我得到警告:

隱式轉換將整數精度NSInteger轉換為int

- (int)  aMethod {
    NSUserDefaults *u = [NSUserDefaults standardUserDefaults];
    return [u integerForKey:@"someKey"];
}

如果將返回類型更改為NSInteger我會得到

aMethod int與NSInteger的實現中沖突的返回類型

-(NSInteger)  aMethod {
    NSUserDefaults *u = [NSUserDefaults standardUserDefaults];
    return [u integerForKey:@"someKey"];
}

我試過轉換返回類型

return (NSInteger)[u integerForKey:@"someKey"];

要么

return (long)[u integerForKey:@"someKey"];

但是除非將其強制轉換為(int),否則我無法消除錯誤

return (int)[u integerForKey:@"someKey"];

我已經閱讀了很多SO問題,但是我似乎找不到很好的答案。

更新此方法的正確方法是什么?

方法:

- (int) aMethod ...

返回int類型的值。 該方法可能首先在標頭( .h )文件中聲明,然后在實現( .m )文件中定義。

該聲明:

return [u integerForKey:@"someKey"];

返回調用integerForKey:的結果,它是NSInteger類型的值。

NSInteger不是(Objective-)C 語言定義的類型,而是在框架中定義的類型別名typedef ),用於表示平台上的“自然”整數大小。 它是一個別名int在32位的平台和long 64位。

因此,編譯器錯誤告訴您(現在)64位值將被截斷以適合32位結果。 沒有解決此問題的正確方法,這取決於與@someKey關聯的值的@someKey是:

  • 如果該值現在應為64位,則更改aMethod的返回類型; aMethod ,返回aMethod 在單獨的聲明中(如果有的話)以及在執行中; NSInteger 您還需要檢查在調用該方法的任何地方返回NSInteger值都是可接受的,並且可能需要對變量類型等進行后續更改。您還需要查看與鍵關聯的值在哪里組。
  • 如果與鍵關聯的值可能仍為32位,則可以使用intForKey:而不是integerForKey並將返回類型保持原樣。 您還應該更改將鍵設置為存儲int

HTH

更正

intForKey:上有一個(不再是)便捷方法intForKey: NSUserDefaults 備選方案包括: integerForKey:和強制轉換; objectForKey:獲取NSNumber引用,然后獲取intValue 等等

暫無
暫無

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

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