您好,登錄后才能下訂單哦!
最近在使用initWithCoder中遇到了野指針的問題;
情形如下:
父類的initwithcoder:
- (id)initWithCoder:(NSCoder *)aDecoder{ NSDictionary *info = [aDecoder decodeObjectForKey:@"info"]; self = [[YFModel alloc]initWithInfo:info]; return self; }
子類的initithcoder:
- (id)initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; if (self){ _newsTitle = [aDecoder decodeObjectForKey:@"newstitle"]; _newsDescription = [aDecoder decodeObjectForKey:@"newsDescription"]; _newsID = [aDecoder decodeObjectForKey:@"newsID"]; _thumb = [aDecoder decodeObjectForKey:@"thumb"]; _newsEditor = [aDecoder decodeObjectForKey:@"newsEditro"]; _newsDetail = [aDecoder decodeObjectForKey:@"newsDetail"]; } return self; }
調(diào)試中出現(xiàn)如下錯(cuò)誤:
執(zhí)行
_newsTitle = [aDecoder decodeObjectForKey:@"newstitle"];
時(shí)遇到野指針問題。原因是父類的初始話方法中執(zhí)行了
self = [[YFModel alloc]initWithInfo:info];
,對(duì)內(nèi)存空間重新分配,子類
self = [super initWithCoder:aDecoder];
得到的指針為父類類型,內(nèi)存中沒有
_newsTitle_newsDescription_newsID_thumb_newsEditor_newsDetail
這些實(shí)例變量,所以報(bào)錯(cuò)。更改方法,在父類的初始化方法中萬萬不能alloc
- (id)initWithCoder:(NSCoder *)aDecoder{ self = [super init]; _info = [aDecoder decodeObjectForKey:@"info"]; return self; }
改正這樣既可。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。