【问题标题】:Access private properties and methods between class extension categories in Objective-C在 Objective-C 中的类扩展类别之间访问私有属性和方法
【发布时间】:2016-05-03 02:49:09
【问题描述】:

我有一个要拆分为多个文件的类。我尝试使用类别,但不知道如何使其发挥作用。

我的班级名为UserManager,我想创建UserManager+AmazonUserManager+Facebook

问题是我确实需要访问在UserManager+Amazon 中实现的私有属性和/或方法UserManager+Facebook,反之亦然。

如何在 UserManager.m 主文件之外提取方法,同时保持对私有内容的访问?

【问题讨论】:

  • @Avi,然后,我收到警告说这些方法没有实现,对吧?
  • 我删除了我之前的评论,因为它不是那么连贯。请参阅我对 CJ Dev 答案的评论。

标签: ios objective-c objective-c-category


【解决方案1】:

编辑:@Avi 下面有一个绝妙的主意,虽然我没有测试过。

我也刚刚发现了一个解决方案:Properties for Class and Its Subclasses Only

它适用于类别和子类。我已经用我的代码对其进行了测试,并且可以正常工作。它在BaseClass.h 上使用了一个类扩展,并在接受的答案正下方提供了一个已实现的示例。


旧: 我最近也一直在努力解决这个问题。 我目前的想法是创建第三类UserManager+Private,它实现所有私有方法并通过关联对象(http://nshipster.com/associated-objects/)处理属性。 感觉很笨拙,但它可能对你有用。如果存在更好的解决方案,我仍然会感兴趣。

【讨论】:

  • 不使用关联对象,而是将这些属性放入主类实现中。在您的类别导入的私有界面中声明它们。类别方法(或属性)的实现必须在编译时存在于类中的某个位置。它不必存在于与声明它的@interface 配对的@implementation 部分中。
  • @Avi,但是仍然会产生警告,对吧?我讨厌警告。一个简单的.h.m 文件演示实现将有助于可视化此解决方案。
  • 不产生警告。我自己这样做是为了为NSManagedObject 子类定义特定于方面的接口。
  • @CJDev,但如果BaseClass.m 没有实现- (void)baz 方法,则会生成警告,即使在ChildClass.m 中实现也是如此。而且在我的情况下,我有很多方法没有在基类中实现,我不想在里面写空方法。
猜你喜欢
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多