一句話筆記(07)

一句話筆記,某段時(shí)間內(nèi)遇到或看到的某個(gè)可記錄的點(diǎn)昼窗。 2016-8-19

  • removerFromSuperView 的使用
  • NSArray 中 lastObject firstObject
  • .dSYM 文件的初步了解
  • 使用 insertItemsAtIndexPaths 遇到的一個(gè)問題
1给涕、 removerFromSuperView 的使用

在某些視圖界面,我們經(jīng)常會(huì)用到 removerFromSuperView該方法,但是 removerFromSuperView 之后绍妨,那個(gè)view 的內(nèi)存塊真的立馬消失啦嗎盅抚?

首先漠魏,我們清楚的是addSubview & removeFromSuperview兩者是對(duì)應(yīng)的:

- (void)addSubview:(UIView *)view;
- (void)removeFromSuperview;

通過 MAC 中,測試發(fā)現(xiàn) 使用 addSubview 時(shí)view 的retainCount 是加1的妄均,而使用 removeFromSuperview 時(shí) view 也是加1的柱锹,這很奇怪,但你多次使用 removeFromSuperview 又會(huì)因?yàn)閮?nèi)存提早是釋放而被崩掉丰包,原因是:

在MRC時(shí)期經(jīng)常發(fā)現(xiàn)retainCount不準(zhǔn)確禁熏,這主要是因?yàn)閕OS系統(tǒng)API的引用、或自動(dòng)釋放池導(dǎo)致的;
所以retainCount并不能當(dāng)做可靠的參考邑彪。

而我們現(xiàn)在基本都是在ARC的環(huán)境下瞧毙,而提到的問題,removerFromSuperView 之后寄症,那個(gè)view 的內(nèi)存塊真的立馬別干掉嗎宙彪? 答案肯定是不會(huì)的,準(zhǔn)確的消失的時(shí)間不確定有巧,應(yīng)該是 當(dāng)前runloop 結(jié)束后消失的释漆,反正在 dealloc 之前肯定會(huì)被干掉。

言簡意賅篮迎,在ARC 中男图,對(duì)于內(nèi)存這塊的考慮,我們使用 removeFromSuperview 時(shí) 是沒有必要太多擔(dān)憂的柑潦,另外就算我們重復(fù)使用該方法享言,系統(tǒng)也只會(huì)執(zhí)行一次,不必?fù)?dān)心多次使用的問題渗鬼。

同時(shí)注意官方文檔中提到的:

Never call this method from inside your view’s drawRect: method.
永遠(yuǎn)不要在你的view的drawRect方法中調(diào)用removeFromSuperview览露;

更詳細(xì)可閱讀:隨便說說removeFromSuperview方法

2、 NSArray 中 lastObject firstObject

為什么會(huì)對(duì)比一下這兩個(gè)方法呢譬胎?因?yàn)閕OS 7.0 之前是沒有暴露 firstObject 的差牛,所以不得不重看一下,當(dāng)時(shí)好多人都是直接寫一個(gè)分類獲取該方法的堰乔,同時(shí)注意的是注意當(dāng)時(shí)Mac OSX的SDK并沒有偏化,后期才出來的

@property (nullable, nonatomic, readonly) ObjectType firstObject 
NS_AVAILABLE(10_6, 4_0);

雖說上面寫的是 Mac OS 10.6 和 iOS 4_0 就有了,但是之前是沒有暴露的镐侯。所以此處是提醒自己一定要注意 版本的差異性侦讨。


#import "NSArray+firstObject.h"
@implementation NSArray (firstObject)
- (id) firstObject {
    if (self.count > 0) {
        return [self objectAtIndex:0];
    }else{
        return nil;
    }
}
@end

PS: 備注看看 YY 寫 的 NSArray 丟失的 firstObject 方法.

3、.dSYM 文件的初步了解

在Xcode編譯項(xiàng)目之后,會(huì)在app旁看見一個(gè)同名的.dSYM文件韵卤,它是一個(gè)編譯的中轉(zhuǎn)文件骗污,簡單說就是 debug 的 symbols 包含在這個(gè)文件中。

  • 作用:當(dāng)release的版本 crash的時(shí)候沈条,會(huì)有一個(gè)日志文件需忿,包含出錯(cuò)的內(nèi)存地址,,使用symbolicatecrash工具能夠把日志和dSYM文件轉(zhuǎn)換成可以閱讀的log信息蜡歹,也就是將內(nèi)存地址屋厘,轉(zhuǎn)換成程序里的函數(shù)或變量和所屬于的 文件名。

PS:備注學(xué)習(xí):dSYM 文件分析工具

所以注意發(fā)布程序的時(shí)候保留.dSYM 文件可與用來還原崩潰

4月而、 使用 insertItemsAtIndexPaths 遇到的一個(gè)問題

在用UICollectionView的時(shí)候汗洒,加載更多數(shù)據(jù)的時(shí)候后,可以直接用[self.collectionView reloadData], 但是會(huì)出現(xiàn)一閃的情況景鼠,而調(diào)用 insertItemsAtIndexPaths則可以很好的解決這個(gè)問題仲翎,但是我用的的時(shí)候遇到這個(gè)BUG: _endItemAnimationsWithInvalidationContext:tentativelyForReordering:

經(jīng)過查找網(wǎng)上問題,檢查并結(jié)合自己的代碼發(fā)現(xiàn)了兩個(gè)以下會(huì)發(fā)生上述bug的原因:

  • 數(shù)據(jù)源的數(shù)量與操作cell后的cell的數(shù)量不一致
  • 在使用下面方法的時(shí)候同時(shí)調(diào)用了 [self.collectionView reloadData];
  • 使用 performBatchUpdates 配合铛漓,這個(gè)一般不會(huì)崩潰溯香,但可能有意想不到的問題。
- (void)insertItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
- (void)deleteItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
- (void)reloadItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;

同時(shí)也注意用到這個(gè)方法:

- (void)performBatchUpdates:(void (^ __nullable)(void))updates completion:(void (^ __nullable)(BOOL finished))completion; // allows multiple insert/delete/reload/move calls to be animated simultaneously. Nestable.
[self.collectionView performBatchUpdates:^{
      [self.collectionView insertItemsAtIndexPaths:indexPaths];
       } completion:NULL];

使用該系列方法一定要注意這兩個(gè)坑浓恶,稍不注意就可能遇到該Bug玫坛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市包晰,隨后出現(xiàn)的幾起案子湿镀,更是在濱河造成了極大的恐慌,老刑警劉巖伐憾,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勉痴,死亡現(xiàn)場離奇詭異,居然都是意外死亡树肃,警方通過查閱死者的電腦和手機(jī)蒸矛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胸嘴,“玉大人雏掠,你說我怎么就攤上這事×酉瘢” “怎么了乡话?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耳奕。 經(jīng)常有香客問我绑青,道長诬像,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任闸婴,我火速辦了婚禮颅停,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掠拳。我一直安慰自己,他們只是感情好纸肉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布溺欧。 她就那樣靜靜地躺著,像睡著了一般柏肪。 火紅的嫁衣襯著肌膚如雪姐刁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天烦味,我揣著相機(jī)與錄音聂使,去河邊找鬼。 笑死谬俄,一個(gè)胖子當(dāng)著我的面吹牛柏靶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溃论,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼屎蜓,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了钥勋?” 一聲冷哼從身側(cè)響起炬转,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎算灸,沒想到半個(gè)月后扼劈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菲驴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年荐吵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谢翎。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捍靠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出森逮,到底是詐尸還是另有隱情榨婆,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布褒侧,位于F島的核電站良风,受9級(jí)特大地震影響谊迄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烟央,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一统诺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疑俭,春花似錦粮呢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哩照,卻和暖如春挺物,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背飘弧。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國打工识藤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人次伶。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓痴昧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親学少。 傳聞我的和親對(duì)象是個(gè)殘疾皇子剪个,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • 27、ViewController的didReceiveMemoryWarning是在什么時(shí)候調(diào)用的版确?默認(rèn)的操作是...
    煙雨平生花飛舞閱讀 566評(píng)論 0 1
  • 1.自定義控件 a.繼承某個(gè)控件 b.重寫initWithFrame方法可以設(shè)置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,371評(píng)論 2 4
  • OC的動(dòng)態(tài)性:會(huì)把編譯和鏈接是需要執(zhí)行的邏輯延遲到運(yùn)行時(shí)扣囊,例如使用 id 所修飾的變量會(huì)在運(yùn)行的時(shí)候才確定具體類型...
    allen852閱讀 598評(píng)論 0 1
  • 1、禁止手機(jī)睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa閱讀 1,116評(píng)論 1 6
  • 好雨知時(shí)節(jié)绒疗,當(dāng)春乃發(fā)生侵歇。 春天里的小雨,淅瀝瀝吓蘑。想必古人杜甫兄當(dāng)年惕虑,是在如此的春意下,作出這千古絕句磨镶。值喜溃蔫,值好。...
    張梓荷閱讀 389評(píng)論 0 0