iOS開發筆記之四十一 乙個野指標引起的bug

2021-07-04 00:24:51 字數 1142 閱讀 2906

這個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...