這個bug
大概是這樣子,我打出的包,裝到真機上,會
crash
。但是在模擬器甚至連線真機進行聯調時,一切正常。拿到
crash
日誌跟蹤時,因為報錯的方法包含的**太大了,所以很難找出原因在**。 1
、bug
的起源來自下面一行前人留下的「古老
」**:
@property (nonatomic, assign) pair *cursort;
**中是這樣使用這個
cursort
變數的,首先對它進行初始化:
self.cursort = [nvobjectutil pairwithid:[urlaction stringforkey:@"sort"] name:nil type:0];
然後,在後面會有邏輯使用這個字段:
if (self.cursort)
以及後面在使用這個
self
.currentdatasource.cursortpair
進行了一系列的賦值操作。
2、到底是什麼原因造成了
crash
,當用assign
修飾乙個屬性變數時,而且這個屬性變數不是基本屬性變數時,它的賦值操作就不會改變引用計數,會被
arc即時給清理掉。所以,
self
.currentdatasource.cursortpair
指向的記憶體區域的值,被釋放掉了。而此時
self
.currentdatasource.cursortpair
就會指向一片
「未知的
」記憶體區域,成為了聞名遐邇的
「野指標
」,如果運氣好,指向的記憶體區域值可能不會
crash
你的,運氣不好的話,就會造成一些你意想不到的後果,當然直接
crash
算是最直觀的現象了。所以改為如下即可:
@property (nonatomic, strong) pair *cursort;
iOS開發筆記
1.預設快取策略下 useprotocolcachepolicy 對於靜態資源的訪問,請求頭會自動帶上 if none match if modified since 快取方面,響應頭帶有 last modified etag 兩個字段 儘管charles抓包結果為304,但是 urlsession...
opencv學習筆記四十一 稀疏光流跟蹤
lucas kanada光流假設 場景中物體被跟蹤的部分的亮度不變 相鄰幀之間的運動較小 相鄰的點保持相鄰。lk演算法只需要每個感興趣點周圍小視窗的區域性資訊,但是較大的運動會將點移除這個小視窗,從而造成演算法無法再找到這些點。金字塔的lk演算法可以解決這個問題,即從金字塔的最高層 細節最少 開始向...
iOS開發筆記之工具篇
工欲善其事,必先利其器。作為乙個合格的ios開發者,熟練的使用各種開發或輔助開發的工具也算是一項必備技能吧,下面是我整理的一些工具及其應用場景和使用方法。charles wireshark github sourcetree cornerstone sqlitebrowser datum alloc...