<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Natural

     

    UITableView滾動時crash

    照著網(wǎng)上的教程,吭哧吭哧寫好了一個tableView,Run起來,界面出現(xiàn)了。還來不及高興一下,一滾動,坑爹啊,直接crash掉了,退出。

    打開調(diào)試模式,再重現(xiàn)一次,Debugger Console顯示的結(jié)果是“Program received signal: "EXC_BAD_ACCESS"”.
    這個結(jié)果表示代碼中有數(shù)組越界或者哪里內(nèi)存泄漏了。(網(wǎng)上教程不靠譜啊,完全照著教程敲代碼竟然都錯了)

    還好總共沒幾個方法,多加幾個斷點調(diào)試一下。
    問題出來了:當向下滾動,調(diào)用cellForRowAtIndexPath消息時,執(zhí)行到第25行代碼tableData已經(jīng)被回收了。

    問題分析:
    數(shù)組初始化放在viewDidLoad消息中,照著教程敲使用arrayWithObjects來創(chuàng)建。從語法上講,此方法是autorelease的,不需要我們手動去release。
    然而問題也出在這,當向下滾動時,不知為何在viewDidLoad初始化的數(shù)組都已經(jīng)被回收了。

    修正方案:
    把viewDidLoad消息中數(shù)組創(chuàng)建方法都改為[[NSArray alloc] initWithObject: ……];方式創(chuàng)建,再在dealloc中釋放掉就OK了。

    推斷總結(jié):
    此代碼的界面是用IB拉出來的,對于新人來說我們并不清楚它的view的創(chuàng)建細節(jié)。從執(zhí)行效果來看,它在創(chuàng)建view時嵌套了個NSAutoreleasePool,向下滾動時已經(jīng)把pool給release掉了,所以出現(xiàn)crash。

    得到教訓就是:使用IB創(chuàng)建界面時,那些自定義的對象盡量使用alloc/retain/copy方式創(chuàng)建,自己release。把內(nèi)存管理寄托在自動釋放池中是不靠譜的,除非這個池是你自己創(chuàng)建并釋放的。


    源代碼如下
     1 
     2 - (void)viewDidLoad {
     3     [super viewDidLoad];    
     4     tableData = [NSArray  arrayWithObjects:@"香辣醬香骨",@"肉末燒豆腐",@"芙蓉蝦",@"紅燒帶魚",
     5                  @"粉蒸排骨",@"自來紅月餅",@"蛋黃蓮蓉月餅",@"南瓜奶酪蛋糕",
     6                  @"南瓜沙拉",@"五香毛豆",@"奶油冰淇淋",@"焦糖南瓜冰淇淋",nil];
     7     thumbnails =[NSArray arrayWithObjects:@"a.jpg",@"b.jpg",@"c.jpg",@"d.jpg",@"e.jpg",@"f.jpg",
     8                   @"g.jpg",@"h.jpg",@"i.jpg",@"j.jpg",@"k.jpg",@"l.jpg",nil];
     9     prepTime = [NSArray arrayWithObjects:@"10 min",@"5 min",@"5 min",@"10 min",@"8 min",@"30 min",
    10                   @"30 min",@"45 min",@"20 min",@"5 min",@"50 min",@"40 min",nil];
    11 }
    12 
    13 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    14     return [tableData count];
    15 }
    16 
    17 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    18     static NSString *simpleTableIdentifier = @"SimpleTableItem";
    19     SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    20     if(cell == nil){
    21         NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
    22         cell = [nib objectAtIndex:0];
    23     }
    24     NSUInteger row = [indexPath row];
    25     cell.nameLabel.text = [tableData     objectAtIndex:row];
    26     cell.thumbnailImageView.image = [UIImage imageNamed:[thumbnails objectAtIndex:row]];
    27     cell.prepTimeLabel.text = [prepTime objectAtIndex:row];
    28     return cell;
    29 }
    30 
    31 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    32     return 78;
    33 }
    34 
    35 - (void)dealloc {
    36     [super dealloc];
    37 }

    posted on 2012-09-07 11:33 此號已被刪 閱讀(1014) 評論(0)  編輯  收藏 所屬分類: Objective-C


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(8)

    隨筆分類(83)

    隨筆檔案(78)

    文章檔案(2)

    相冊

    收藏夾(7)

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产高清免费在线| 最近中文字幕国语免费完整| 黄页网站在线观看免费高清| 亚洲成色999久久网站| 久久免费观看视频| 亚洲精品无码午夜福利中文字幕 | 美女网站免费福利视频| 亚洲网红精品大秀在线观看| 久久精品一本到99热免费| 亚洲国产高清在线| 国产乱子精品免费视观看片| 亚洲妓女综合网99| 好爽…又高潮了毛片免费看| 亚洲欧美日韩中文无线码| 永久免费无码网站在线观看| 午夜在线亚洲男人午在线| 亚洲精品在线视频| 99精品一区二区免费视频| 91嫩草亚洲精品| 巨胸喷奶水视频www网免费| 精品视频免费在线| 亚洲另类激情综合偷自拍图| 99精品一区二区免费视频| 精品国产成人亚洲午夜福利| 国产18禁黄网站免费观看| aa级女人大片喷水视频免费| 亚洲AV无码久久精品蜜桃| 亚洲成年人免费网站| 久久久久久亚洲av无码蜜芽| 亚洲国产专区一区| 99ee6热久久免费精品6| 亚洲熟妇无码AV| 色噜噜亚洲精品中文字幕| **一级毛片免费完整视| 亚洲AV无码一区二区三区电影 | 成人影片一区免费观看| 亚洲成人在线免费观看| 免费A级毛片在线播放不收费| 中文字字幕在线高清免费电影| 亚洲天堂福利视频| 亚洲一本大道无码av天堂|