Objective-C:如何从子类访问父私有属性?

 七彩咩_131 发布于 2023-02-07 23:00

您可以在第二个头文件中放置这些属性的访问器,并在"需要知道"的基础上导入该文件.例如

mySuperClass + undocumentedProperties.h

#import "mySuperClass.h"

@interface mySuperClass(undocumentedProperties)

  @property (nonatomic, strong) UITextField *emailField;

 @end

mySuperClass.m

#import "mySuperClass+undocumentedProperties.h"

@interface mySuperClass()
///stuff that truly will be private to this class only
// self.emailField is no longer declared here..
@end

@implementation mySuperClass

@synthesize emailField; //(not really needed anymore)

/// etc, all your code unaltered
@end

mySubclass.h

#import "mySuperClass.h"
@interface mySubclass:mySuperClass

///some stuff
@end

mySubclass.m

#import "mySubclass.h"
#import "mySuperClass+undocumentedProperties.h"
@implementation

//off you go, this class is now 'aware' of this secret inherited property..

@end

很明显,MySuperClass.m必须导入这个.h文件以及它的默认文件(或者实际上不是,默认的是内置于此文件中),但你的子类也可以导入它(直接导入它们的.m文件,所以这些属性对于类来说是私有的.这不是一个合适的类别,因为没有相应的mySuperClass + undocumentedProperties.m文件(如果你尝试过,你无法为这些秘密属性合成支持iVars.享受:)

1 个回答
  • 您可以在第二个头文件中放置这些属性的访问器,并在"需要知道"的基础上导入该文件.例如

    mySuperClass + undocumentedProperties.h

    #import "mySuperClass.h"
    
    @interface mySuperClass(undocumentedProperties)
    
      @property (nonatomic, strong) UITextField *emailField;
    
     @end
    

    mySuperClass.m

    #import "mySuperClass+undocumentedProperties.h"
    
    @interface mySuperClass()
    ///stuff that truly will be private to this class only
    // self.emailField is no longer declared here..
    @end
    
    @implementation mySuperClass
    
    @synthesize emailField; //(not really needed anymore)
    
    /// etc, all your code unaltered
    @end
    

    mySubclass.h

    #import "mySuperClass.h"
    @interface mySubclass:mySuperClass
    
    ///some stuff
    @end
    

    mySubclass.m

    #import "mySubclass.h"
    #import "mySuperClass+undocumentedProperties.h"
    @implementation
    
    //off you go, this class is now 'aware' of this secret inherited property..
    
    @end
    

    很明显,MySuperClass.m必须导入这个.h文件以及它的默认文件(或者实际上不是,默认的是内置于此文件中),但你的子类也可以导入它(直接导入它们的.m文件,所以这些属性对于类来说是私有的.这不是一个合适的类别,因为没有相应的mySuperClass + undocumentedProperties.m文件(如果你尝试过,你无法为这些秘密属性合成支持iVars.享受:)

    2023-02-07 23:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有