【问题标题】:How to set property of a super class in objective c?如何在目标 c 中设置超类的属性?
【发布时间】:2015-04-22 19:57:31
【问题描述】:

在我的目标 c 代码中,我尝试设置超类属性

super.aProperty = something;

但我收到此错误“在 'MySuperClass' 类型的对象上找不到属性 'aProperty'。

在我的 MySuperClass.m 中,我有

@interface MySuperClass ()

@property (strong, nonatomic) SomeProperty *aProperty;

@end

您能告诉我为什么“super.aProperty = something”不起作用吗?

谢谢。

更新:

我尝试移动这一行“@property (strong, nonatomic) SomeProperty *aProperty;”到.h。

但我收到错误提示“未知类型名称“SomeProperty”,您的意思是“SomeOtherProperty”吗?我的 .h 文件中有 #include SomeProperty.h。

【问题讨论】:

  • 看看我的回答

标签: objective-c


【解决方案1】:

因为编译子类时编译器看不到它。您在 .m 文件而不是 .h 文件中拥有该属性,这意味着它是仅在同一个 .m 文件中可见的私有属性。

如果你想要一个公共属性,你需要把它放在.h文件中,并在你需要访问该属性时包含该文件。

而且大多数时候,你可以像 self.aProperty = something; 一样调用它,除非你已经覆盖它并且不想在子类中调用实现(以避免无限递归)

【讨论】:

  • 补充一点,同样重要的是要注意该属性是在类别中定义的,而不是在类定义中。语法@interface MySuperClass () 通常用作私有类别以添加仅在该特定类中需要的功能。换句话说,该属性并不真正属于当前定义中的超类。
  • @BrandonBuck 它实际上被称为未命名类别的扩展。
【解决方案2】:

希望对你有帮助

您在类扩展(https://stackoverflow.com/a/24568948/3767017)内声明变量,而在类扩展内,该变量只能以私有方式访问。如果您需要在其他类中访问该变量,则必须将其设为公共或受保护的。

@interface yourClass : parentClass {
  SomeProperty *aProperty; // protected by default

  @protected
   SomeProperty *aProperty; 
 }

@property (strong, nonatomic) SomeProperty *aProperty;//public

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 2012-03-12
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多