【发布时间】:2019-01-11 08:01:23
【问题描述】:
我想在 Objective-C 中使用'protected',所以我写了FatherView 类和AView 类:
typedef NS_OPTIONS(NSInteger, DisplayViewT) {
DisplayViewT_One ,
DisplayViewT_Two ,
};
@interface FatherView : UIView{
@protected
UIView *_test_one_view ;
UIView *(*_testV_funcp_void)(DisplayViewT displayT) ;
}
@end
在FatherView类中,_testV_one_view属性是一个函数指针, 你可以看到FatherView的实现:
@interface FatherView()
@property (nonatomic , strong) UIView *test_two_view ;
@end
@implementation FatherView
- (id) init
{
self = [super init] ;
if( self ){
self->_test_one_view = [[UIView alloc] init] ;
self.test_two_view = [[UIView alloc] init] ;
self->_testV_funcp_void = (UIView *(*)(DisplayViewT))[self methodForSelector:@selector(test_func_testV:)] ;
}
return self ;
}
- (UIView *)test_func_testV:(DisplayViewT)displayT
{
UIView *displayV = nil ;
switch (displayT) {
case DisplayViewT_One:{
displayV = self->_test_one_view ;
}
break;
case DisplayViewT_Two:
default:{
displayV = self.test_two_view ;
}
break;
}
return displayV ;
}
@end
AView 类是FatherView 类的子类:
@interface AView : FatherView
- (void)exc_teest ;
@end
@implementation AView
- (void)exc_test
{
UIView *oneV = self->_testV_funcp_void(DisplayViewT_One) ;
NSLog(@"%@",oneV) ;
}
@end
问题: AView 有一个方法,该方法的名称是 exc_test , 我调用方法(exc_test)。
但是 Xcode 打印结果:null !
为什么? AView是FatherView的子类,_test_one_view是FatherView的属性,_test_one_view是在FahterView的init方法中创建的,我想在AView类中打印FahterView的属性(属性为_test_one_view),结果为null,为什么?
我不知道为什么......
我需要你的帮助,谢谢...
【问题讨论】:
标签: ios function-pointers protected