ios 多继承问题

2015-05-12 16:39:25 +08:00
 tsinghan

我想给所有的controller都继承一个基类, 但是呢,我这个些controller 有的都已经继承了 UIViewController, 像这种情况怎么办? 用协议?

3766 次点击
所在节点    iDev
15 条回复
cxe2v
2015-05-12 16:46:00 +08:00
让你的基类继承UIViewController,controller再继承基类
googolxi
2015-05-12 16:56:29 +08:00
在代码中写一个BaseViewController,封装一些变量和方法进去,后边创建的控制器都继承BaseController,代码如下
#import "BaseViewController.h"
@interface NewsDetailViewController : BaseViewController
likid
2015-05-12 17:17:13 +08:00
replace all
rayshen
2015-05-12 18:57:36 +08:00
多继承即一个子类可以有多个父类,它继承了多个父类的特性。
monsabre1
2015-05-12 19:09:32 +08:00
不提倡
这个是c++让人晕菜的原因之一
tsinghan
2015-05-12 22:03:25 +08:00
@cxe2v
@googolxi
但是如果有的controller继承 uiviewcontroller 有的继承UITableViewController 这种情况呢
monsabre1
2015-05-12 22:22:51 +08:00
objectivec

提倡

1.单一继承
2.组合
finian
2015-05-12 22:26:20 +08:00
@tsinghan 这种情况下只能用协议了。其实你需要解决什么问题?是这些 controller 类都需要有某些相同行为是么?
tsinghan
2015-05-13 09:03:30 +08:00
@finian 比如说,我想在所有的controller里面都实现一个判断网络状态的方法,我就想到定义一个基类,在这个基类里面去实现, 但是呢 我现在的controller有的继承UIViewController 有的继承UITableViewController, 是不是应该把继承UITableViewController的controller改成继承UIViewController,然后再实现tableview的协议, 这样就能按照
@cxe2v
@googolxi
的说法 实现继承了
cxe2v
2015-05-13 09:13:36 +08:00
@tsinghan 如果实在不行你可以把判断网络状态的方法独立出来,所有controller去调用这个方法就可以了
finian
2015-05-13 09:41:01 +08:00
@tsinghan 如楼上所说,将判断网络状态的方法独立出来,用组合而非继承的方式比较好
tsinghan
2015-05-13 14:02:14 +08:00
@cxe2v
@finian 好的 多谢
vincentxue
2015-05-13 14:05:48 +08:00
我的工程一般有一个基类,两个子基类。

例如:

@interface XXXBaseViewController : UIViewController

@interface XXXBaseTableViewController : XXXBaseViewController <UITableViewDataSource, UITableViewDelegate>

@interface BaseCollectionViewController : BaseViewController <UICollectionViewDataSource, UICollectionViewDelegate>

后面两个都是自己实现的,之所以不用系统的是因为我发现系统的如 UITableViewController 有时候会有问题,例如某些下拉刷新库用不了,约束不能改,反正很多限制,不如自己实现。
chengchao0311
2015-05-15 07:33:22 +08:00
runtime, class_addMethod, Method Swizzling.
xi_lin
2015-05-20 23:19:57 +08:00
补一个category

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/190488

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX