1,警告:“xoxoxoxo” is deprecated
解決辦法:查看xoxoxoxo的這個方法的文檔,替換掉這個方法即可。
2,警告:Declaration of “struct sockaddr” will not be visible outside of this function
解決辦法:在你的開源.m文件中添加 #import <netinet/in.h>
3,警告:Implicit conversion from enumeration type ‘UIInterfaceOrientation’ to different enumeration type ‘UIDeviceOrientation’
解決辦法:類型不匹配。跳到出錯的那一行,UIInterfaceOrientation強制轉(zhuǎn)換為UIDeviceOrientation就行了。
4,警告:incompatible pointer types assigning to ‘MyArrayList *’from ‘NSMutableArray’
解決辦法:加入強制轉(zhuǎn)換(MyArrayList)
5,警告:‘&&’ within ‘||’問題出處:if (exists && !isDirectory || !exists)………
解決辦法: if ((exists && !isDirectory) || !exists)………
6,警告:Warning:The Copy Bundle Resources build phase contains this target’s Info.plist file
解決辦法:將Info.plist文件移到Resources目錄下,而不要直接放在target下。
7,警告:在使用ASIHttp…第三方庫的,運行報錯。
解決辦法:看你的項目中是否添加CFNetwork.framework、SystemConfiguration.framework, MobileCoreServices.framework,CoreGraphics.framework和libz.1.2.3.dylib,如果是sdk5.0以上,改添加libz.1.2.5.dylib
8,警告:xxxooo,missing required architecture i386 in file
解決辦法:如果是錯誤信息的話:Target->Build Settings->Search Paths, 刪除FrameworkSearch Paths 里面內(nèi)容就可以了。要只是一個警告的話,真機調(diào)試可以過。具體解決方法待大神出現(xiàn)。
9,警告:clang: error: no such file or directory: ‘/demo2/控件代碼/13/Recorder/Recorder_Prefix.pch’clang: error: no input filesCommand /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1
解決辦法: 在你的主工程文件 target搜素,pch ,找到Prefix Header 把它后面的值,都刪除,再運行就解決了。
10,警告:“ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute
解決辦法:如果定義了ARC有效,那么必須要有所有者屬性的定義;所以代碼改成下面這樣@property (nonatomic, strong, readonly) NSString *ss;
11,警告:io6一下的xib系統(tǒng)均沒有自動選擇Use Autolayout, Supporting iOS 5 and below with xib of iOS 6
解 決辦法:Just un-select “Use Autolayout” in the file inspector of the xib’s view and we are back to the familiar autosizing in size inspector and boom, it supports iOS 5 and below.
12,警告:Warning: Multiple build commands for output file xxx.png 解決辦法:找到項目里xxx.png重復,刪除重復的資源。
11, 錯誤信息:“OBJC_CLASS$ xxxxx “, referenced from:objc-class-ref in ViewController.old: symbol(s) not found for architecture i386clang: error: linker command failed with exit code 1 (use -v to see invocation)
解決方法: 查看工程,看是不是沒有導入相關(guān)的框架?;蛘吖こ汤锾砑拥挠邢嗤?m”,”.h” 文件
12, 錯誤信息:Couldn’t register dy.CKRiLiText with the bootstrap server. Error: unknown error code.This generally means that another instance of this process was already running or is hung in the debugger.Current language: auto; currently objective-c
解決方法: 可能是電腦內(nèi)存問題引起,重啟電腦即可解決。如果重啟解決不了問題,那就是你剛剛改動的代碼引起的問題。13 、 錯誤信息:ios 5是調(diào)試正常的,ios 6真機調(diào)試的時候,出現(xiàn)如下錯誤:ld: file is universal (3 slices) but does not contain a(n) armv7s slice: /Users/mac4/Desktop/my desktop/My app/MyApp name 20:09:12 /MyApp name/ZBarSDK/libzbar.a for architecture armv7serror: linker command failed with exit code 1 (use -v to see invocation)
解決方法:在Xcode里,點擊相應的Target,然后點Build Settings,找到VALID_ARCHS,看里面的是不是arvm7s,如果不是改成arvm7s就可以了。
14 、 錯誤信息:error: receiver type ‘ViewController’ for instance message does not declare a method with selector ‘hideSearchBar:’ [4]ViewController 中沒有聲明一個方法選擇’hideSearchBar:
解決方法:在ViewController .h 中聲明一下這個方法 “ hideSearchBar ” 即可。
15、 錯誤信息:當json從服務端請求時得到的字符串,如果這樣寫的話,會報錯,‘;’ after top level declaratorNSString *ss= @”{“recommend”:”世界末日”,”dogname“:”機器人”}”;
解決方法:就是,把 “ 替換成 \” 即可。NSString *ss= @”{ \”recommend \”:\”世界末日 \”, \”dogname \”: \”機器人 \”}”;
31,警告:warning: Semantic Issue: Incompatible integer to pointer conversion assigning to ‘BOOL *’ (aka ‘signed char *’) from ‘BOOL’ (aka ‘signed char’)
解決辦法: 檢查 BOOL *換為BOOL就可以了,多寫一個 * 號。Xcode升級到4.4后,出現(xiàn)了一堆的Warning.網(wǎng)上搜了一些辦法,總結(jié)一下。
32:Jsonkit中的
Direct access to objective-c’s isa is deprecated in favor of object_setClass() and object_getClass()object->isa 替換為 object_getClass(object)keyObject->isa 替換為 object_getClass(keyObject)(id)keys[idx]->isa 替換為 object_getClass((id)keys[idx])
format specifies type ‘unsigned long’ but the argument has type ‘nsuinteger’ (aka ‘unsigned int’)給變量增加(unsigned long)進行類型轉(zhuǎn)換
33:md5加密(iOS SDK中自帶了CommonCrypto
Implicit declaration of function ‘CC_MD5′ is invalid in C99
view plaincopy
define CC_MD5_DIGEST_LENGTH 16+(NSString *)MD5HashForString:(NSString *)input {const char *cStr = [input UTF8String];unsigned char result[CC_MD5_DIGEST_LENGTH];CC_MD5(cStr, strlen(cStr), result);return [NSString stringWithFormat: @”%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x”,result[0], result[1], result[2], result[3],result[4], result[5], result[6], result[7],result[8], result[9], result[10], result[11],result[12], result[13], result[14], result[15]];}
引入函數(shù)定義的頭文件
.#import <CommonCrypto/CommonDigest.h>
34:ASIDataDecompressor中的警告
format specifies type ‘short’ but the argument has type ‘int’
在+ (NSError *)deflateErrorWithCode:(int)code 和 +(NSError *)inflateErrorWithCode:(int)code中
[NSString stringWithFormat:@”Compression of data failed with code %hi”,code] 中
將code改為 (short)code,類型轉(zhuǎn)換
35:Reachability中警告
Using ‘stringWithString:’ with a literal is redundant
statusString = [NSString stringWithString: @”Not Reachable”];
改為:statusString = @”Not Reachable”;
36.format specifies type ‘id’ but the argument has type ‘const char *’
NSCAssert(NO, @”Unhandled error encountered during SAX parse. msg is %@”, msg);改為:NSCAssert(NO, @”Unhandled error encountered during SAX parse. msg is %@”, [NSString stringWithUTF8String:msg]);
37 118:65: Using ‘stringWithString:’ with a literal is redundant
改為:self.locationInput.text = @”captured change”;
38 在項目中設置控件的layer屬性時,會發(fā)生錯誤,”Property ‘c’ cannot be found in forward class object ‘CALayer *”,
這時需要引入 #import <QuartzCore/CALayer.h>。
41,錯誤Error launching remote program: failed to get the task for process
解決方法:把真機上的軟件,刪除,然后,clean 一下,重新運行就可以了。
42,真機調(diào)試的時候,出現(xiàn)

解決方法:
把 ,

43,真機調(diào)試的時候,出現(xiàn) ios Broken pipe
解決方法::推出xcode:斷開機器(iphone,ipad,ipod)鏈接:重啟iPhone在聯(lián)接xcode,就可以了。
在用xcode4開發(fā)的時候,刪除不用的文件后, 編譯的時候會有missing file的警告,原因是由于SVN或git造成的。
如圖:
解決方案:
1.運行終端,執(zhí)行命令行進入missing file目錄,然后運行svn delete nameOfMissingFile或git rm nameOfMissingFile2.刪除隱藏的.svn文件。命令行運行defaults write com.apple.finder AppleShowAllFiles TRUE
killall Finder開啟顯示隱藏文件,然后到工程目錄下刪除.svn文件,然后再恢復defaults write com.apple.finder AppleShowAllFiles FALSE
killall Finder3.進入工程目錄,運行下面命令刪除隱藏文件find . -name .svn -exec rm -rf { } ;
使用Xcode 4時, 文件已經(jīng)刪除,但是會出現(xiàn)missing file錯誤,這一般是SVN或git造成的,有幾種方法可以刪除:刪除一個文件:
1.命令行進入missing file目錄,然后運行
svn delete 文件名 或 git rm 文件名
批量刪除的一個方法,刪除.svn文件:在終端中輸入cd (有空格),將項目文件夾拖進入,回車輸入命令行:rm -rf find . -type d -name .svn再回車引用:http://blog.sina.com.cn/s/blog_63e26d560100ve00.html
解決警告“l(fā)d: warning: directory not found for option”
從項目中刪除了某個目錄、文件以后,編譯出現(xiàn)警告信息:
ld: warning: directory not found for option“XXXXXX”
很奇怪,為什么已經(jīng)從項目中刪除了文件和文件夾還是報這個警告呢?
去掉警告的辦法如下:
1選擇工程, 編譯的 (targets)
2選擇 Build Settings 菜單
3查找 Library Search Paths 和 Framework Search Paths, 刪掉編譯報warning的路徑即OK


Crash原因Crash原因有共性,歸納起來有:?6?1 內(nèi)存管理錯誤?6?1 程序邏輯錯誤?6?1 SDK錯誤 (部署版本< 編譯版本)?6?1 主線程阻塞內(nèi)存管理錯誤內(nèi)存管理是iPhone開發(fā)所要掌握的最基本問題,特別是使用引用計數(shù)手動管理內(nèi)存的情況。內(nèi)存管理錯誤包括:?6?1 內(nèi)存泄漏:未釋放不會再使用對象。比如alloc忘記release,malloc忘記free??捎肵codeProduct菜單下的Analyze功能來解決該問題;1 引用出錯:引用已經(jīng)被釋放的對象指針。很多“莫名其妙”的Crash都是由于窗體經(jīng)歷的生命周期所導致的(viewDidUnload、viewDidLoad),在iOSSimulator里模擬內(nèi)存警告就可以解決該問題;1 內(nèi)存警告:App使用的內(nèi)存超出設備的限制,iOS將強制掛起App,強制掛起iOS是不會記錄Crashlog,F(xiàn)lurry也無法記錄。內(nèi)存泄漏、快速/大量的分配內(nèi)存都可能導致內(nèi)存警告,這時候應該盡可能的釋放不需要的資源。通過Instruments->Allocations里的Heapshot功能能夠找出哪些資源未被釋放。WWDC 2012的Session242 - iOS App Performance_ Memory是專門討論內(nèi)存管理這個話題。程序邏輯錯誤數(shù)組越界、堆棧溢出、并發(fā)操作、邏輯錯誤。扎實的編碼基礎、嚴謹細致的工作習慣、清晰的思路可以避免這類錯誤;SDK錯誤這個錯誤出現(xiàn)的現(xiàn)象是有的設備運行正常,有的會Crash。原因是未找到框架、類、方法、屬性。比如:用iOS5.0 SDK編譯并運行在iOS4.0的設備上,5.0的Twitter框架在4.0的設備上找不到。這種問題常出現(xiàn)在用蘋果新發(fā)布的Xcode編譯原有的工程。未找到框架的解決辦法是:部署版本>= 編譯版本。iOS框架向后兼容做的很棒,部署版本> 編譯版本一般不會出現(xiàn)問題。未找到類、方法、屬性的解決辦法是:先判斷是否存在再使用if(NSClassFromString(@"MFMailComposeViewController"))respondsToSelector:主線程阻塞主線程阻塞超過10s,iOS將強制掛起App。把長時間的任務放到后臺線程去執(zhí)行,可使用NSThread,NSOperation, dispatch。WWDC2012的Session235 - iOS App Performance_ Responsiveness有詳細的介紹。解決Crash思路是:定位Crash的程序代碼,預測Crash原因,尋找解決方案,測試。有多種方式可以定位Crash的程序代碼:1 Debug模式時,iOSSimulator斷點測試定位Crash的堆棧;?6?1 真機連接iTunes查看Crashlog (Debug模式下);?6?1 通過Flurry的錯誤記錄查看;定位之后,就是重新思考程序上下文邏輯,并有理由的預測Crash出現(xiàn)的原因。預測的越多,理解的越深。尋找解決方案的方法有:?6?1 瀏覽蘋果官方SDK文檔,找出錯誤原因;?6?1 Google搜索Crash輸出的信息,重點查找行業(yè)內(nèi)技術(shù)論壇:cocoachina、stackoverflow、iphonedevsdk等;?6?1 查看歷屆WWDC的視頻、示例代碼;?6?1 在工程里添加環(huán)境變量: NSZombieEnabled、NSDebugEnabled,輸出有價值的信息;?6?1 如果未找到任何信息,可以尋求蘋果官方論壇、業(yè)內(nèi)技術(shù)論壇的幫助; 測試找到解決方案后就需要測試,測試功能輸入輸出的準確性、程序性能、是否引入新的bug。測試有專業(yè)的測試工程師來負責,但開發(fā)工程師不能依賴測試工程師來發(fā)現(xiàn)問題,盡量獨立解決已知存在的問題。由于Xcode部署工程到真機上比較耗時間,如果可以的話盡可能用iOSSimulator來測試,以減少測試的時間。建議開發(fā)工程師有一個checklist,在產(chǎn)品測試時自己逐一過一下上面常見的問題,這個能夠避免大部分Crash。下圖是我們一個產(chǎn)品的FlurryError記錄,那120個錯誤Session是測試Crash時留下的。當然這個記錄是沒有包括iOS將強制掛起App的情況。
- 常見的EXEC_BAD_ACCESS,EXC_BAD_INSTRUCTION錯誤,一般是因為訪問已經(jīng)被release的對象造成的。
最郁悶的莫過于程序毫無征兆地就崩潰了,用bt命令打出調(diào)用棧,給出的是一堆系統(tǒng)EXC_BAD_ACCESS的信息,根本沒辦法定位問題出現(xiàn)在哪里。通常這樣的崩潰出現(xiàn),原因一般就是:調(diào)用了已經(jīng)釋放的內(nèi)存空間,或者說重復釋放了某個地址空間 在工程中加入NSZombieEnabled 環(huán)境變量,并設為啟用,則在 EXC_BAD_ACCESS 發(fā)生時,XCode 的 Console 會打印出問題描述中,設置方法:雙擊Executables 下的 可執(zhí)行模組,在彈出窗口中,Variables to be set in the environment,添加 NSZombieEnabled,并設定為 YES,點擊選中復選框啟用此變量。
可以再加入 MallocStackLogging 來啟用malloc記錄,以獲得更多的提示來幫助定位問題。
一般服務端返回的字符串為nil 如果不加判斷
NSArray ,mutableArray 等沒有申請內(nèi)存,直接用
block 直接用有時會造成這樣的bug block可能為空
遇到這種問題,看代碼,看實現(xiàn)的邏輯,打斷點,return ,po ,bt 指令,網(wǎng)上查資料,
2.內(nèi)存問題,循環(huán)引用,代理用strong
代理要assign ,或者weak ,
block 也可能導致循環(huán)引用 __block __weak blockSelf=self;
__weak clsass=[Class alloc]init;
內(nèi)存泄露 delloc 把代理設為空
3.removeFromSuperView ,然后復位空
在做適配的又xib 添加約束,要自己添加UITableView的時候,要把元來的移除掉
4.UITableView卡頓的問題
復用之前還要把cell之前的數(shù)據(jù)清空
關(guān)于常見場景:大IO、復雜算法、大量創(chuàng)建對象、大量添加View等等都有可能消耗性能。不過常見的case一般都是IO,比如樓主說的下載圖片。 除了使用異步下載之外,還需要注意異步下載的狀態(tài),因為建立連接也是需要消耗資源的,雖非當前線程資源,但整個設備的資源依然是有限的,如果你同時建立上百個異步下載連接(例如用戶滑動經(jīng)過了上百條Cell),系統(tǒng)也會卡頓,這也是需要注意的
5.做IOS適配的時候
4s 首次安裝的時候數(shù)據(jù)無法顯示,WIFI 連接問題,非必現(xiàn)
6.閃退,url,不存在,方法不當都有導致閃退
7.數(shù)據(jù) 后臺更新前臺無法接受,有可能是后臺的問題
8,需求變更,需求不確定,后臺數(shù)據(jù),
在Xcode6下開發(fā)時,使用autolayout的xib出現(xiàn)警告:Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0
原因:xcode6下默認開啟自動設置UILabel的 preferredMaxLayoutWidth 的屬性,而自動的特性只支持iOS8,故導致這個警告,如果想兼容iOS7則需要消除。
解決方法:設置固定的 preferredMaxLayoutWidth (勾選Explicit(其中如果label不是多行就不用勾選了,因為無效)如果只想支持iOS8就不要勾選了,動態(tài)的更加方便),如下圖,并在代碼中實時修改此屬性(注:此屬性只對多行的UILabel有效,即lines不為1,如果是1行的不需要修改)。
performSelector may cause a leak because its selector is unknown
from:http://stackoverflow.com/questions/7017281/performselector-may-cause-a-leak-because-its-selector-is-unknown
第一種解決辦法:
As a workaround until the compiler allows overriding the warning, you can use the runtime
objc_msgSend(_controller, NSSelectorFromString(@"someMethod"));
instead of
[_controller performSelector:NSSelectorFromString(@"someMethod")];
You'll have to
import <objc/message.h>
第二種:
To ignore the error only in the file with the perform selector, add a #pragma as follows:
pragma clang diagnostic ignored "-Warc-performSelector-leaks"
第三種:
define SUPPRESS_PERFORM_SELECTOR_LEAK_WARNING(code) \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored "-Warc-performSelector-leaks"") \ code; \ _Pragma("clang diagnostic pop") \SUPPRESS_PERFORM_SELECTOR_LEAK_WARNING( return [_target performSelector:_action withObject:self]);
Warning: Multiple build commands for output /.../...
出現(xiàn)這種 Warning 的原因
由于將原來資源文件包刪除,重新加入后,導致編譯器在編譯時,又一次引入了該資源!也就是說,編譯的外部資源引入重復!
解決方法:
如何避免種情況的發(fā)生
1.刪除項目文件,要從工程中刪除。
2.切記,同一個資源不可重復引用到工程中。
3.添加資源,要從工程中添加。
4.最好,再刪除資源后,先Clean 一下項目。
iOS內(nèi)存錯誤EXC_BAD_ACCESS的解決方法(message sent to deallocated instance) 轉(zhuǎn):點擊打開鏈接
iOS開發(fā),最郁悶的莫過于程序毫無征兆地就崩潰了,用bt命令打出調(diào)用棧,給出的是一堆系統(tǒng)EXC_BAD_ACCESS的信息,根本沒辦法定位問題出現(xiàn)在哪里。通常這樣的崩潰出現(xiàn),原因一般就是:調(diào)用了已經(jīng)釋放的內(nèi)存空間,或者說重復釋放了某個地址空間。而怎樣定位到這個地址呢,可以通過編輯xcode的scheme,添加如下標記位,讓系統(tǒng)把錯誤地址打印出來,如圖:**(通過Product->Scheme->Edit Scheme進入下面編輯頁面,選中Arguments tab,增加標計位NSZombieEnabled設為YES)**

這樣,但崩潰出現(xiàn),系統(tǒng)會出現(xiàn)以下提示信息:
2013-06-23 00:45:20.479 *** -[__NSArrayM addObject:]: message sent to deallocated instance 0x7179910
可見崩潰原因是內(nèi)存地址0x7179910被重復釋放了。****
** 如果崩潰是發(fā)生在當前調(diào)用棧,通過上面的做法,系統(tǒng)就會把崩潰原因定位到具體代碼中。但是,如果崩潰不在當前調(diào)用棧,系統(tǒng)就僅僅只能把崩潰地址告訴我們,而沒辦法定位到具體代碼,這樣我們也沒法去修改錯誤。這時就可以修改scheme,讓xcode記錄每個地址alloc的歷史,這樣我們就可以用命令把這個地址還原出來。如圖:(跟設置NSZombieEnabled一樣,添加MallocStackLoggingNoCompact,并且設置為YES)

這樣,當出現(xiàn)崩潰原因是message sent to deallocated instance 0x7179910,我們可以使用以下命令,把內(nèi)存地址還原:**
info malloc-history 0x7179910****
如圖,這個命令能具體把這個地址在哪一行代碼生成還原出來。

(需要注意的是,因為這個命令只支持gdb,所以必須把控制臺的輸出改成gdb,并且有點遺憾的是,只支持模擬器,不支持真機調(diào)試)

(同樣是通過Product->Scheme->Edit Scheme進入上面編輯頁面,選中Info tab)這樣,好好檢查一下那一行的代碼,應該就很容易找出問題所在了。
Warning: Multiple build commands for output /.../...
出現(xiàn)這種 Warning 的原因
由于將原來資源文件包刪除,重新加入后,導致編譯器在編譯時,又一次引入了該資源!也就是說,編譯的外部資源引入重復!
解決方法:
如何避免種情況的發(fā)生
1.刪除項目文件,要從工程中刪除。
2.切記,同一個資源不可重復引用到工程中。
3.添加資源,要從工程中添加。
4.最好,再刪除資源后,先Clean 一下項目




