这个例子代码中的警告如何处理?

2015-07-21 22:51:12 +08:00
 georgetso
地址: http://pan.baidu.com/s/1pJ7ReHH

类似的情况有,

ScrollView的定义
@interface UIScrollView : UIView
@property(nonatomic,assign) id<UIScrollViewDelegate> delegate;
@end

TableView的定义
@interface UITableView : UIScrollView
@property (nonatomic, assign) id <UITableViewDelegate> delegate;
@end

TableView Delegate的定义
@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>
@end


UIKit就是这样做的,我也这样做为什么被警告?
1793 次点击
所在节点    iDev
3 条回复
ashamp
2015-07-22 00:12:14 +08:00
关注.....
a412739861
2015-07-23 01:25:35 +08:00
只是消除警告的话,改B的属性名称就呗。
@property(nonatomic, weak) id<BProtocol> delegate1;
————————————————————————————————————————————
http://stackoverflow.com/questions/9765033/how-to-properly-subclass-a-delegate-property-in-objective-c/14632135#14632135
第一种模仿至UIKit的写法,应该是这个样子吧
————————————————————————————————————————————
@class UITableView;
@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>
// protocol~
@interface UITableView : UIScrollView <NSCoding>
@property (nonatomic, assign) id <UITableViewDelegate> delegate;

所以应该上面的是漏写了吧,毕竟里面的东西有点乱糟糟的排布。>_< 不过他的两种方法,我都没成功。可能还漏了什么。
————————————————————————————————————————————
但是第二种方法加的时候,警告不一样。
//ClassB.h
@property(nonatomic, weak) id<AProtocol,BProtocol> delegate;

脑洞添加:
//ClassB.m
@dynamic delegate;
警告消失了……

所以是不是可能苹果隐藏了那部分能够消除警告的实现呢……
——————
睡前看了这题,第一时间想的就是开头的原因,能解决警告,而且不仅仅是警告。不过这样不能达到override property,用起来的确很不舒服。
Google关键词override property后想了点的成功。
————————
距离我看到这个题目有一小时了,真是折腾自己。Google选手……hope helpful >_<睡去了。
georgetso
2015-07-29 19:34:47 +08:00
@a412739861 @dynamic is just what I need

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

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

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

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

© 2021 V2EX