为什么UITableViewController不执行UITableView的代理方法
就拿UITableView来说。将一个controller设置为它的代理。UITableView在绘制表的时候并不知道要绘制几个section和几个row。这个时候他就会向它的代理询问这些信息。这个时候在controller中的代理方法就会被执行。告诉UITableView去怎样的绘制。在绘制每个CELL的时候,UITableView也不知道应该怎样去绘制,这个时候它会去询问他的代理。代理方法再告诉它去绘制一个怎样的cell。也就是说代理方法是在View需要一些信息的时候在它的delegate中被执行的。这样主要是为了MVC的设计结构。就说tableView的dataSource代理中的,numberOfSectionsInTableView等代理函数,在转屏的时候肯定内部会调用,而在tableView的frame发生改变的时候,也对被调用。在Xcode中调试可以查看堆栈调用顺序:第一次初始化:#00x0000a0b2in-[ViewControllernumberOfSectionsInTableView:]at*******/ViewController.m:95#10x319742d0in-[UITableViewRowData(UITableViewRowDataPrivate)_updateNumSections]()#20x3197421cin-[UITableViewRowDatainvalidateAllSections]()#30x31988a48in-[UITableView(_UITableViewPrivate)_updateRowData]()#40x319888dain-[UITableViewnoteNumberOfRowsChanged]()#50x319884f8in-[UITableViewreloadData]()#60x3198671ain-[UITableViewlayoutSubviews]()#70x3194280ain-[UIView(CALayerDelegate)layoutSublayersOfLayer:]()#80x335a5d62in-[CALayerlayoutSublayers]()#90x335a5900inCA::Layer::layout_if_needed(CA::Transaction*)()#100x335d47a6in-[CALayerlayoutIfNeeded]()#110x319ec0d0in-[UIViewControllerwindow:setupWithInterfaceOrientation:]()#120x319eb2bcin-[UIWindow_setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:]()#130x319ea48ein-[UIWindow_setRotatableClient:toOrientation:updateStatusBar:duration:force:]()#140x319ea418in-[UIWindow_setRotatableViewOrientation:duration:force:]()#150x31b20180in__57-[UIWindow_updateToInterfaceOrientation:duration:force:]_block_invoke_0()#160x319a8680in-[UIWindow_updateToInterfaceOrientation:duration:force:]()#170x319a83c4in-[UIWindowsetAutorotates:forceUpdateInterfaceOrientation:]()#180x319a7d32in-[UIViewController_tryBecomeRootViewControllerInWindow:]()#190x3199eeaain-[UIWindowaddRootViewControllerViewIfPossible]()#200x3199aaecin-[UIWindow_setHidden:forced:]()#210x319dc1d0in-[UIWindowmakeKeyAndVisible]()#220x00009c36in-[AppDelegateapplication:didFinishLaunchingWithOptions:]()转屏调用堆栈:#00x0000a0b2in-[ViewControllernumberOfSectionsInTableView:]at*****/ViewController.m:95#10x319742d0in-[UITableViewRowData(UITableViewRowDataPrivate)_updateNumSections]()#20x3197421cin-[UITableViewRowDatainvalidateAllSections]()#30x319a9504in-[UITableViewsetFrame:]()#40x319a29d0in-[UIView(Geometry)_applyAutoresizingMaskWithOldSuperviewSize:]()#50x319a273ain-[UIView(Geometry)_resizeWithOldSuperviewSize:]()#60x31b2bb2ein-[UIScrollView_resizeWithOldSuperviewSize:]()#70x34b9baeein__NSArrayChunkIterate()#80x34b94a78in__NSArrayEnumerate()#90x34af6b6ain-[NSArrayenumerateObjectsWithOptions:usingBlock:]()#100x3195b0aain-[UIView(Geometry)resizeSubviewsWithOldSize:]()#110x319a34bain-[UIView(Geometry)setBounds:]()#120x31acad94in-[UIViewControllerwindow:willAnimateRotationToInterfaceOrientation:duration:]()#130x319eb2bcin-[UIWindow_setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:]()#140x319ea48ein-[UIWindow_setRotatableClient:toOrientation:updateStatusBar:duration:force:]()#150x319ea418in-[UIWindow_setRotatableViewOrientation:duration:force:]()#160x31b20180in__57-[UIWindow_updateToInterfaceOrientation:duration:force:]_block_invoke_0()#170x319a8680in-[UIWindow_updateToInterfaceOrientation:duration:force:]()#180x319b1d2cin-[UIWindow_updateInterfaceOrientationFromDeviceOrientation:]()重新设置frame等:#00x0000a0b2in-[ViewControllernumberOfSectionsInTableView:]at***/ViewController.m:95#10x319742d0in-[UITableViewRowData(UITableViewRowDataPrivate)_updateNumSections]()#20x3197421cin-[UITableViewRowDatainvalidateAllSections]()#30x319a9504in-[UITableViewsetFrame:]()
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!