一.? 如果import用了C++的東西的苔货,要把自己的.m文件改成.mm文件
二.嘗試iOS device時(shí)鏈接期提示警告信息:
ld: warning: PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in code signed PIE, but used in _FT_Stream_Open from /Users/kres/Downloads/freetype-2.4.9/libfreetype.a(ftsystem.o). To fix this warning, don’t compile with -mdynamic-no-pic or link with -Wl,-no_pie
查了一下,所謂的PIE是指position independent executable,即地址無(wú)關(guān)exe爬早,換句話說(shuō)也就是生成的機(jī)器碼中不能出現(xiàn)lea rax, some_symbol_name這樣的絕對(duì)尋址柑蛇,而只能以:lea rax, [rel some_symbol_name]這種形式出現(xiàn),目的是為了提高安全性,這樣OS可以以隨機(jī)的地址加載exe荷逞。去掉CFLAGS中的-mdynamic-no-pic后重新編譯鏈接armv6 armv7兩個(gè)版本的free type代碼,警告去除粹排,不知是否會(huì)有副作用种远,繼續(xù)體驗(yàn)…
這種警告解決的辦法:targets-->build Settings-->Linking-->Don't create Position Independent Executables
設(shè)置為YES.警告自然消除。
三.Applications using Launch Screen Files and targetting iOS 7.1 and earlier need to also include a Launch Image in an Asset Catalog.
I ran into the exact same problem this morning. Here's how I fixed it.
Select your project in the project navigator. Under the General tab, you should see the section for App Icons and Launch Images. Where you see Launch Images Source, click 'Use Asset Catalog'.
You will then see Migrate launch images to an asset catalog dialogue. Click 'Migrate'.
Make sure that your Launch Images Source on the previous screen points to the right image set in your asset catalog. In your case, you would set it to 'Default'.
四.-ObjC
最近在做一個(gè)項(xiàng)目的時(shí)候顽耳,需要使用到一個(gè)第三方庫(kù)坠敷,這個(gè)庫(kù)的使用向?qū)Ю锩嫣貏e說(shuō)明,在添加完該庫(kù)后斧抱,需要在Xcode的Build Settings下Other Linker Flags里面加入-ObjC標(biāo)志常拓,這個(gè)標(biāo)志以前沒(méi)使用過(guò),所以我就專門研究了一下它的作用辉浦。
之所以使用該標(biāo)志,和Objective-C的一個(gè)重要特性:類別(category)有關(guān)茎辐。根據(jù)這里的解釋宪郊,Unix的標(biāo)準(zhǔn)靜態(tài)庫(kù)實(shí)現(xiàn)和Objective-C的動(dòng)態(tài)特性之間有一些沖突:Objective-C沒(méi)有為每個(gè)函數(shù)(或者方法)定義鏈接符號(hào),它只為每個(gè)類創(chuàng)建鏈接符號(hào)拖陆。這樣當(dāng)在一個(gè)靜態(tài)庫(kù)中使用類別來(lái)擴(kuò)展已有類的時(shí)候弛槐,鏈接器不知道如何把類原有的方法和類別中的方法整合起來(lái),就會(huì)導(dǎo)致你調(diào)用類別中的方法時(shí)依啰,出現(xiàn)"selector not recognized"乎串,也就是找不到方法定義的錯(cuò)誤。為了解決這個(gè)問(wèn)題速警,引入了-ObjC標(biāo)志叹誉,它的作用就是將靜態(tài)庫(kù)中所有的和對(duì)象相關(guān)的文件都加載進(jìn)來(lái)。
本來(lái)這樣就可以解決問(wèn)題了闷旧,不過(guò)在64位的Mac系統(tǒng)或者iOS系統(tǒng)下长豁,鏈接器有一個(gè)bug,會(huì)導(dǎo)致只包含有類別的靜態(tài)庫(kù)無(wú)法使用-ObjC標(biāo)志來(lái)加載文件忙灼。變通方法是使用-all_load 或者-force_load標(biāo)志匠襟,它們的作用都是加載靜態(tài)庫(kù)中所有文件,不過(guò)all_load作用于所有的庫(kù)该园,而-force_load后面必須要指定具體的文件酸舍。
明白了這些, 就清楚里初,這個(gè)第三方庫(kù)中一定是定義了一些類別來(lái)擴(kuò)著已有類啃勉,打開(kāi)頭文件,發(fā)現(xiàn)果然如此青瀑。
一些第三方庫(kù)里對(duì)系統(tǒng)庫(kù)的類加了 category 璧亮,
這時(shí)萧诫,就需要使用編譯參數(shù): -ObjC ,這樣第三方庫(kù)中對(duì)系統(tǒng)類作的擴(kuò)展方法才能在工程中使用枝嘶。
但是使用 -Objc 后帘饶,會(huì)產(chǎn)生兩個(gè)問(wèn)題:
1 、 undefined symbols
2 群扶、 duplicate symbol
undefined symbols 說(shuō)明工程中沒(méi)有引入第三方庫(kù)引用的庫(kù)及刻。
如果不加 -ObjC 參數(shù),則在編譯時(shí)不會(huì)出錯(cuò)竞阐,但運(yùn)行時(shí)用到了沒(méi)引用庫(kù)的方法缴饭,則系統(tǒng)會(huì)崩潰。
這個(gè)問(wèn)題好解決骆莹。只要找到缺的庫(kù)颗搂,引入工程就可以了。
duplicate symbol 的問(wèn)題就不好解決了幕垦,說(shuō)明第三方庫(kù)中的類名和工程中的類名丢氢,或其它第三方庫(kù)中的類名重名了。
最常見(jiàn)的比如 Reachability 這個(gè)類先改,如果第三方庫(kù)中引用了疚察,自己的工程中也引用了,就會(huì)報(bào) duplicate symbol 仇奶。
如果引用的第三方庫(kù)沒(méi)有源代碼貌嫡,就只能將自己工程中的重名類重命名了。
應(yīng)對(duì)上面的問(wèn)題该溯,如果自己要制作一個(gè)庫(kù)的話岛抄,要注意兩點(diǎn):
1 、避免對(duì)系統(tǒng)類加 category, 這樣朗伶,別人用你的庫(kù)時(shí)弦撩,不加 ObjC 參數(shù)也可以用你的庫(kù)。
2 论皆、如果庫(kù)中用到了其它的第三方的源代碼益楼,尤其是用的比較普遍的,如 Reachability, 一定一定要對(duì)
這些類重命名点晴,最常見(jiàn)的作法就是給類名加個(gè)前綴感凤。以避免別人用你的庫(kù)時(shí),產(chǎn)生 duplicate symbol 的問(wèn)題粒督。
五.關(guān)于問(wèn)題ld:library not found for -lXXX 和ld:warning:directory not found option 以及duplicate symbol的解決辦法
ld:library not found for -lXXX 的問(wèn)題有可能是你的某個(gè)庫(kù)的連接引用有問(wèn)題,解決的辦法就是在項(xiàng)目的target里,選中Link Binary With Libraries 里的.a或framework 取消再加入,就可以了
六.No known instance method for selector 'respondsToSelector:'
協(xié)議里找不到這個(gè)方法?
這個(gè)是沒(méi)有繼承基協(xié)議造成的 繼承下<NSObject>
七.今天放在button上的圖片 放什么都變成藍(lán)色 郁悶了一個(gè)小時(shí)才發(fā)現(xiàn)
buttonWithType:UIButtonTypeCustom 寫成了buttonWithType:UIButtonTypeSystem
WTF!
在button中犯的錯(cuò) 還有一個(gè)就是 我重寫了一個(gè)button類 替換的 時(shí)候 沒(méi)有替換alloc里面的UIButton
八.xcode中 有時(shí)候會(huì)報(bào)一個(gè)警告:
[WARN]Warning: Multiple build commands for output file /xxx
要解決這個(gè)問(wèn)題很簡(jiǎn)單:
1.選擇你的工程
2.選擇target
3.點(diǎn)擊 Build Phases
4.展開(kāi)Copy Bundle Resources
5.刪除里面的剛才提示警告的文件,一般為紅色的名字的文件
九.關(guān)于屏幕旋轉(zhuǎn)
我每次轉(zhuǎn)動(dòng)屏幕的時(shí)候 ?就老是電池條跑啊跑的 把這個(gè)刪了 整個(gè)世界就清凈了
按我的理解 這個(gè)東西 用SB寫界面的可以留著 ? 用代碼寫的就刪了吧
十.Duplicate declaration of method 'XXXXXXX:'
duplicate ['dju:plik?t, 'dju:plikeit]n. 副本陪竿;復(fù)制品
declaration [dekl?'re??(?)n]n. (納稅品等的)申報(bào);宣布;公告族跛;申訴書
方法重復(fù)申明了