0

「分析」を使用すると、dealloc で次のようになります: この時点で呼び出し元が所有していないオブジェクトの参照カウントの誤ったデクリメント

- (void)loadScrollViewWithPage:(int)page {
    int kNumberOfPages = [dataSource numberOfPages];

if (page < 0) return;
if (page >= kNumberOfPages) return;

// replace the placeholder if necessary
UIImageView *view = [imageViews objectAtIndex:page];
if ((NSNull *)view == [NSNull null]) {
    view = [dataSource imageAtIndex:page];
    [imageViews replaceObjectAtIndex:page withObject:view];
    [view release]; //<--here 
}
// add the controller's view to the scroll view
if (nil == view.superview) {
    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    view.frame = frame;
    [scrollView addSubview:view];
}

}

の解き方?ありがとう。

4

1 に答える 1

1

Basic Memory Management Rulesを確認してください。

[dataSource imageAtIndex:page] はビューへの参照を提供しますが、所有権は提供しません。自分が所有しているオブジェクトのみを「リリース」できます。「alloc」、「new」、「copy」、「mutableCopy」で始まるメソッド、または「retain」の明示的な呼び出しを介して、オブジェクトの所有権を取得します。

于 2013-10-30T01:47:28.220 に答える