2013-03-07 214 views
0

我製作了一個應用程序(我的第一個應用程序),並啓用了ARC,分佈式應用程序(不在應用程序庫上),並開始獲取它在某些Mac上崩潰的報告。經過嘗試和他們的幫助後,我們發現問題是他們有一個32位處理器。所以我禁用了ARC,將該版本設置爲x86_64並且收到了一大堆錯誤消息。將SAFELY 64位應用程序轉換爲32/64位應用程序

所有的人都被分類了,現在我離開的警告(黃色的)的負載我。我擔心我忘記了一些事情,並且弄亂了記憶。你認爲什麼是最好的方式來從64位應用程序到32/64位應用程序而不會忘記什麼? 爲什麼ARC在第一時間使用,如果有很多Mac不兼容?

謝謝!

----- UPDATE ------

爲reuquested:

Update to recommended settings 

Property 'delegate' requires method 'delegate' to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation 

Property 'delegate' requires method 'setDelegate:' to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation 

'__bridge' casts have no effect when not using ARC 

Variable 'loc_tip' is used uninitialized whenever 'if' condition is false 

Variable 'loc_tip' is used uninitialized whenever '&&' condition is false 

Conflicting parameter types in implementation of 'tableView:toolTipForCell:rect:tableColumn:row:mouseLocation:': 'NSInteger' (aka 'int') vs 'long' 
+1

我們很樂意看到實際的警告,以確定它們對應的潛在錯誤。 – 2013-03-07 12:08:08

+1

「許多」在沒有數字的情況下頗具爭議;它當然不是「最」的,因爲自2006年以來,已經有64位兼容的Mac電腦,這是Macs去年的英特爾。第一款英特爾Mac僅擁有32位處理器,但大約一年之內,這些型號中的每一款都被兼容64位的後繼者取代。作爲一個非常粗略的猜測,人們可以說英特爾Mac 6/7中的人口是64位兼容的。 (爲了更好的估算,看到的Adium的和全方位集團的軟件更新的統計數據。) – 2013-03-08 05:23:50

回答

2

粗糙水提前

所有的人都被分類,現在我留下了一大堆警告(黃色的)。

調高警戒水位。修復它們。

我擔心我忘記了一些事情,並弄亂了記憶。

什麼是你的意見得到弗羅馬64位應用程序的32/64位的應用程序沒有忘記東西的最佳方式?

擔心是自然的,考慮的問題。

一個快速解決方法是使用ObjC和Garbage Collection啓用。這樣做,並相信它只會工作,沒有額外的變化是一個錯誤(閱讀:你應該保留大量的時間進行測試和錯誤狩獵)。另一種方法是,如果你真的想在32和64上得到很好的支持,那就是使用MRC--但是在這種情況下(無ARC),你應該只承諾MRC爲32位和64位。當然,這將需要很多的審查,修復,手動測試和泄漏測試(除非你的程序很小)。對於具有良好長期支持和高質量標準的應用程序來說,這是更好的解決方案。

爲什麼ARC首先使用,如果有很多mac不兼容它?

真的有不是有很多需要32位的mac。如果你今天發佈1.0版,你應該考慮只使用64位。

32位應該從開發開始就得到支持和測試,如果這是一項要求 - 或者ARC選項或32位在很早的時候就被淘汰了。看起來很奇怪,這種疏忽會通過測試和開發而滑落。

更新到推薦的設置

命中 「驗證設置」,審查,執行的變化。

住宅「代表」需要方法「委託」被定義 - 使用@synthesize,@dynamic或在這個類的實現

回聲警告信息提供方法實現

屬性「代表」需要方法「setDelegate:」被定義 - 使用@synthesize,@dynamic或在這個類的實現提供了一種方法的實施

回聲不使用ARC

時警告消息

'__bridge' 強制轉換沒有任何效果

你只使用C樣式轉換在這種情況下

變量 'loc_tip'每當「if」條件爲假時使用未初始化

ARC會爲您做這件事。只是做ARC會做:

NSSomething * loc_tip = nil; 

一旦 '& &' 使用未初始化的變量 'loc_tip' 條件爲假

呼應先前響應

在衝突的參數類型實現'tableView:toolTipForCell:rect:tableColumn:row:mouseLocation:':'NSInteger'(又名'int')和'long'

選擇器的聲明不匹配 - 從頭文件複製聲明(NSTableView.h)並查看(參數類型的)更改是否需要對您的實現進行任何其他更改。

+2

對於「調高警戒線」:https://github.com/boredzo/warnings-xcconfig – 2013-03-08 05:18:21

+0

非常感謝你的回答!不幸的是它第一次的應用程序,所以我不知道它不會與某些Mac兼容。我可能堅持64位版本,並有一個32位版本,不會進一步發展。 – sharkyenergy 2013-03-08 11:45:08

+1

@Justme是的 - 削減32位變體是快速解決方案。希望它不會影響許多客戶。 – justin 2013-03-09 10:31:01