iOS中一些經(jīng)驗問題

前言

小伙伴們在開發(fā)中難免會遇到問題, 你是如何解決問題的馆类?不妨也分享給大家男娄!如果此文章其中的任何一條問題對大家有幫助毅往,那么它的存在是有意義的! 反正不管怎樣遇到問題就要去解決問題, 在解決問題的同時也是提高開發(fā)經(jīng)驗的渠道!

1.既然有問題我們該怎樣解決 ?

首先大部分人都會去百度搜索來解決問題, 誰都不例外, 可是百度這東西會有很多誤解, 甚至誤人子弟, 同時解決問題的效率也不是很高, 如果是技術(shù)問題可以去:

Google簡單來說比百度搜索的答案相對要多,要更準(zhǔn)確效率更高, 建議使用英文搜索

Stack Overflow一個與程序相關(guān)的IT技術(shù)問答網(wǎng)站, 簡單來說工作中的70%問題在這里都能解決

搜索是解決問題的一種辦法, 那么剩余30%的問題還是需要自己獨立去解決, 那么有人會問有沒有能提高獨立解決問題的辦法呢 ? 比如: 積累所遇到的崩潰信息, 學(xué)會查看崩潰信息, 查看官方文檔的技巧等等) 本文暫時不會詳解, 有時間的話需要單獨寫一篇文章來探究如何高效的解決崩潰問題!

2.用斷點調(diào)試崩潰問題的小技巧

(1)如果當(dāng)前斷點指向內(nèi)存, 那么就是初始化時分配內(nèi)存時有問題

(2)添加全局斷點的問題:

添加全局斷點.png

全局斷點的目的就是當(dāng)產(chǎn)生異撤椅或崩潰能夠停留在異程呀穑或者崩潰發(fā)生的地方而不是跳轉(zhuǎn)到主函數(shù)

崩潰斷點.png

但是添加全局斷點后會跳轉(zhuǎn)到主函數(shù), 會遇到如上圖的情況, 那么80%的問題就是storyboard或者xib拖線沒有及時清理掉壞線如下圖:

拖線沒有清除.png

這條Button的連線在代碼中已經(jīng)刪除了不用了, 但是沒有及時清理掉,所以會造成崩潰!

3.NSString使用stringWithFormat拼接的相關(guān)知識

保留2位小數(shù)點

//.2代表小數(shù)點后面保留2位(2代表保留的數(shù)量)NSString*string = [NSStringstringWithFormat:@"%.2f",M_PI];//輸出結(jié)果是: 3.14NSLog(@"%@", string);

用0補全的方法

NSIntegercount =5;//02代表:如果count不足2位 用0在最前面補全(2代表總輸出的個數(shù))NSString*string = [NSStringstringWithFormat:@"%02zd",count];//輸出結(jié)果是: 05NSLog(@"%@", string);

字符串中有特殊符號%怎么辦

NSIntegercount =50;//%是一個特殊符號 如果在NSString中用到%需要如下寫法NSString*string = [NSStringstringWithFormat:@"%zd%%",count];//輸出結(jié)果是: 50%NSLog(@"%@", string);

字符串中有特殊符號"怎么辦

NSIntegercount =50;//"是一個特殊符號, 如果在NSString中用到"需要用\進行轉(zhuǎn)義NSString*string = [NSStringstringWithFormat:@"%zd\"",count];//輸出結(jié)果是: 50"NSLog(@"%@", string);

4.判斷是否為gif/png圖片的正確姿勢

首先我們先想想如果是你, 你會怎么去判斷一個從網(wǎng)絡(luò)獲取的圖片URL是否為gif圖片, 是否是這樣呢 ? 如下:

//假設(shè)這是一個網(wǎng)絡(luò)獲取的URLNSString*path =@"http://pic3.nipic.com/20090709/2893198_075124038_2.gif";// 判斷是否為gifNSString*extensionName = path.pathExtension;if([extensionName.lowercaseStringisEqualToString:@"gif"]) {//是gif圖片}else{//不是gif圖片}

什么難道你不是這么判斷的么 ? 哦~ 我懂了, 難道你使用字符串截取來判斷的嗎 ? 哈哈開個玩笑!

以上判斷看似是可以的,但是這不嚴謹?shù)? 在不知道圖片擴展名的情況下, 如何知道圖片的真實類型 ? 其實就是取出圖片數(shù)據(jù)的第一個字節(jié), 就可以判斷出圖片的真實類型那該怎么做呢如下:

//通過圖片Data數(shù)據(jù)第一個字節(jié) 來獲取圖片擴展名- (NSString *)contentTypeForImageData:(NSData *)data {uint8_tc;? ? [data getBytes:&c length:1];switch(c) {case0xFF:return@"jpeg";case0x89:return@"png";case0x47:return@"gif";case0x49:case0x4D:return@"tiff";case0x52:if([data length] <12) {returnnil;? ? ? ? ? ? }? ? ? ? ? ? NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0,12)] encoding:NSASCIIStringEncoding];if([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {return@"webp";? ? ? ? ? ? }returnnil;? ? }returnnil;}

其實圖片數(shù)據(jù)的第一個字節(jié)是固定的,一種類型的圖片第一個字節(jié)就是它的標(biāo)識,? 我們來調(diào)用一下這個方法:

//假設(shè)這是一個網(wǎng)絡(luò)獲取的URLNSString*path =@"http://pic.rpgsky.net/images/2016/07/26/3508cde5f0d29243c7d2ecbd6b9a30f1.png";NSData*data = [NSDatadataWithContentsOfURL:[NSURLURLWithString:path]];//調(diào)用獲取圖片擴展名NSString*string = [selfcontentTypeForImageData:data];//輸出結(jié)果為 pngNSLog(@"%@",string);

5.Button禁止觸摸事件的2種方式

大家應(yīng)該知道, 有很多需求是在規(guī)定內(nèi)不允許點擊Button, 并且讓用戶知道這個按鈕是不可以點擊的,那我們應(yīng)該這樣設(shè)置:

//會改變按鈕的狀態(tài)媚朦,顏色會變灰button.enabled=NO;

但是又有一個需求是既不能點擊也不要改變Button顏色:

//保持按鈕原來的狀態(tài)氧敢,顏色不會變button.userInteractionEnabled=NO;

6.跟xib一起走過的坑

(1) 如果在xib中有一個控件, 已經(jīng)明確設(shè)置尺寸了,輸出的frame也是對的, 但是顯示出來的效果不一樣(比如尺寸變大了), 如果是這種情況一般就是autoresizingMask自動伸縮屬性在搞鬼! 解決辦法如下:

//xib的awakeFromNib方法中設(shè)置UIViewAutoresizingNone進行清空- (void)awakeFromNib {self.autoresizingMask=UIViewAutoresizingNone;}

(2)如果你的控制器的view是用xib創(chuàng)建的, 當(dāng)你拿到view的尺寸是不準(zhǔn)確的, 在這里我們就需要通過[UIScreen mainScreen].bounds拿到尺寸, 但是storyboard的尺寸是準(zhǔn)確的!

7.你是用什么方法設(shè)置圖片圓角?

首先你是否是這么設(shè)置的:

//cornerRadius 設(shè)置為self.iconImage圖片寬度的一半(圓形圖片)self.iconImage.layer.cornerRadius=20;self.iconImage.layer.masksToBounds=YES;

或者是在xib&storyboard中點擊要設(shè)置圓角的圖片:

xib或者storyboard設(shè)置圓角.png

在此之后建議大家盡量不要這么設(shè)置, 因為使用圖層過量會有卡頓現(xiàn)象, 特別是弄圓角或者陰影會很卡, 如果設(shè)置圖片圓角我們一般用繪圖來做:

/** 設(shè)置圓形圖片(放到分類中使用) */- (UIImage*)cutCircleImage {UIGraphicsBeginImageContextWithOptions(self.size,NO,0.0);// 獲取上下文CGContextRefctr =UIGraphicsGetCurrentContext();// 設(shè)置圓形CGRectrect =CGRectMake(0,0,self.size.width,self.size.height);CGContextAddEllipseInRect(ctr, rect);// 裁剪CGContextClip(ctr);// 將圖片畫上去[selfdrawInRect:rect];UIImage*image =UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();returnimage;}

這個方法就是設(shè)置圓角圖片, 效率很高, 不會造成卡頓現(xiàn)象, 大家要把這個方法單獨放到分類中使用

8. ## 與 @# 在宏里面該怎樣使用

##的使用, 首先我們添加一個宏

#defineLRWeakSelf(type)__weaktypeof(type)weak##type=type;

##是連接的作用, 即當(dāng)使用上面的宏會把weak與輸入的type值連接起來如下圖:

## 的使用.png

#的意思是緊跟著它的后面的標(biāo)識符添加一個雙引號""

@#的使用, 我們添加一個普通的宏:

//隨便寫一個宏#define LRToast(str) [NSString stringWithFormat:@"%@",str]//這個宏需要這樣寫LRToast(@"溫馨提示");NSLog(@"%@",LRToast(@"溫馨提示"));

強調(diào)下我只是隨便定義一個宏來做示例, 以上代碼是正常的使用,我們在來看看添加@#是怎么使用的:

//隨便寫一個宏#define LRToast(str) [NSString stringWithFormat:@"%@",@#str]//這個宏需要這樣寫LRToast(溫馨提示);//正常運行, 打印不會報錯NSLog(@"%@",LRToast(溫馨提示));

我們可以看出來LRToast(溫馨提示);與LRToast(@"溫馨提示");區(qū)別, 也就是說@#可以代替@""那么我們以后開發(fā)就省事了, 不用再添加@""了!

9.自動布局Autolayout口訣

在storyboard或者xib使用自動布局, 如果控件比較多而且布局復(fù)雜, 一不小心就會報一大堆錯誤警告, 那么這個口訣是必備良藥, 跟著這個口訣走再也不用害怕Autolayout恐懼癥了 !

Autolayout.png

按照如上圖從上到下順序讀就是當(dāng)前這條約束的狀態(tài)

First Item(登錄按鈕的頂部)Relation(等于)Second Item(父類View的頂部)Constant(加上 10)Multiplier(乘以 1)

10.App迭代開發(fā)版本號的規(guī)則

在iOS中簡單的版本號是怎樣管理的呢? 首先我們的App第一版本首次上線, 比如以1.0.0為首次上線的版本號:

1.上線后突然發(fā)現(xiàn)一個嚴重的Bug那我們就要修復(fù)更新版本, 此時我們的版本號為1.0.1

所以說如果修復(fù)Bug或者優(yōu)化功能, 我們只修改疊加第三位數(shù)字, 其他不變

2.如果有了新的需求, 在原來的基礎(chǔ)上增加了一個新功能, 那么我們的版本號變?yōu)?.1.0, 需要清空第三位數(shù)字為0, 來疊加修改第二位數(shù)字

3.如果App需求功能大改, 更新量非常大, 那我們的版本號變?yōu)?.0.0, 需要疊加修改第一位數(shù)字, 清空其他數(shù)字為0

11.

文/判若兩人丶(簡書作者)

原文鏈接:http://www.reibang.com/p/8207621ddcaa

著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)莲镣,并標(biāo)注“簡書作者”福稳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瑞侮,隨后出現(xiàn)的幾起案子的圆,更是在濱河造成了極大的恐慌鼓拧,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件越妈,死亡現(xiàn)場離奇詭異季俩,居然都是意外死亡,警方通過查閱死者的電腦和手機梅掠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門酌住,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阎抒,你說我怎么就攤上這事酪我。” “怎么了且叁?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵都哭,是天一觀的道長。 經(jīng)常有香客問我逞带,道長欺矫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任展氓,我火速辦了婚禮穆趴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘遇汞。我一直安慰自己未妹,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布勺疼。 她就那樣靜靜地躺著教寂,像睡著了一般捏鱼。 火紅的嫁衣襯著肌膚如雪执庐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天导梆,我揣著相機與錄音轨淌,去河邊找鬼。 笑死看尼,一個胖子當(dāng)著我的面吹牛递鹉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播藏斩,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼躏结,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狰域?” 一聲冷哼從身側(cè)響起媳拴,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤黄橘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后屈溉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塞关,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年子巾,在試婚紗的時候發(fā)現(xiàn)自己被綠了帆赢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡线梗,死狀恐怖椰于,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仪搔,我是刑警寧澤廉羔,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站僻造,受9級特大地震影響憋他,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜髓削,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一竹挡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧立膛,春花似錦揪罕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至儿奶,卻和暖如春框往,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闯捎。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工椰弊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓤鼻。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓秉版,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茬祷。 傳聞我的和親對象是個殘疾皇子清焕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容