replaceObjectAtIndex:withObject 这个方法也会把参数的引用记数加1

还在搞我的Army项目,弄了太长时间了,但还是没啥进展,闲话不说了,今天在看scrollview实现延时加载技术的 PageControl demo时,注意到一个问题,这里记一下:

MyViewController *controller = [viewControllersobjectAtIndex:page];

    if ((NSNull *)controller == [NSNullnull])

    {

        controller = [[MyViewControlleralloc] initWithPageNumber:page];

        NSLog(@"controller retaincount (ONE %d)",[controllerretainCount]);

        [viewControllers replaceObjectAtIndex:page withObject:controller];

        NSLog(@"controller retaincount (TWO %d)",[controllerretainCount]);

        [controller release];

        NSLog(@"controller retaincount (THREE %d)",[controllerretainCount]);

    }

    

    // add the controller's view to the scroll view

    if (controller.view.superview ==nil)

    {

        NSLog(@"222loadScrollViewWithPage:page=%d$$$$$$$$$$$$$",page);

        CGRect frame = scrollView.frame;

        frame.origin.x = frame.size.width * page;

        frame.origin.y = 0;

        controller.view.frame = frame;

        [scrollView addSubview:controller.view];

--------------------------------------------------------------------------------------------------------

疑惑在这一点上:既然controller都已经release了,为什么下边还能调用 addsubview方法,通过打印NSLog才知道问题出在这一点上:

[viewControllers replaceObjectAtIndex:page withObject:controller];

这个函数把controller的retaincount也加 1 了,先记着吧!!!

你可能感兴趣的:(replaceObjectAtIndex:withObject 这个方法也会把参数的引用记数加1)