在 Objective-C 中,如何从类别访问私有属性

2024-01-03

我想从类的类别中访问该类的私有属性。

但要访问私有财产,我必须在类别中重新声明相同的私有财产。
如果我不重新声明,我会收到编译错误,Property '<property name>' not found on object of type '<class name> *'.

这是从类别访问类的私有属性的正确方法吗?
还有更好的方法吗?

下面的代码是在category中重新声明私有属性的代码:

ClassA.h

@interface ClassA : NSObject
-(void)method1;
@end

ClassA.m

#import "ClassA.h"

// private property
@interface ClassA()
@property (nonatomic) NSString *s;
@end

@implementation ClassA
@synthesize s;

-(void)method1
{
    self.s = @"a";
    NSLog(@"%@", [NSString stringWithFormat:@"%@ - method1", self.s]);
}
@end

A类+类别.h

#import "ClassA.h"

@interface ClassA(Category)
-(void)method2;
@end

A类+类别.m

#import "ClassA+Category.h"

// redeclare private property
@interface ClassA()
@property(nonatomic) NSString *s;
@end

@implementation ClassA(Category)

-(void)method2
{
    NSLog(@"%@", [NSString stringWithFormat:@"%@ - method2", self.s]);
}
@end

这是为私有财产创建文件(ClassA+Private.m)并从 ClassA.m 和 ClassA+Category.m 导入它的好方法:

A级+Private.m

@interface ClassA()
@property(nonatomic) NSString *s;
@end

解决这个问题的最好方法是创建ClassA+Private.h并将其导入ClassA.m and Category.m。注意h最后,你只需要在那里声明你的私有属性和方法,定义最好保留在ClassA.m.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Objective-C 中,如何从类别访问私有属性 的相关文章

随机推荐

  • {“errorMessages”:[“意外字符('''(代码39)):预期有效值

    我发现 使用 POST 查询 here https developer atlassian com jiradev jira apis jira rest apis jira rest api tutorials jira rest api
  • 仅将日期的年份部分用于 WHERE 条件

    在下面的 LINQ 语句中 我想选择考试日期为 2010 年的人员 考试日期存储为日期时间 因为其他应用程序中使用实际日期和时间 将考试日期与 2010 进行比较的最优雅 最简单 最好的方法是什么 或者 我应该使用 gt 将考试日期与 20
  • 是否可以使用 MSDeploy 修改现有站点的 web.config?

    是否可以使用 MSDeploy 修改 或替换 现有站点的 web config 可以替换 Web 配置文件的某些部分 使用 xPath 查询或正则表达式指定 为此 请使用 declareParam 和 setParam 命令行开关 Like
  • Pandas 强制 NaN 位于每个索引的每列底部

    我有一个 DataFrame 其中多个行跨越每个索引 以第一个索引为例 其结构如下 df pd DataFrame A first 1 0 1 0 np NaN np NaN np NaN 2 0 np NaN 2 0 np NaN np
  • 关闭从 mysql.connector python 到 mysql 的池连接

    我正在使用 mysql connector 包并使用进行连接池MySQLConnectionPool班级 我有一个长时间运行的进程 运行此进程时 所有池连接在不规则的时间段模式中保持空闲状态 源代码中有 remove connections
  • 我可以对我自己的非指针类型使用“空指针优化”吗?

    当你有一个Option lt T gt 编译器知道NULL永远不是一个可能的值 T and 编码None变体为NULL instead https stackoverflow com q 16504643 155423 这可以节省空间 us
  • 如何按列累积numpy数组中的值?

    我如何使用numpy累加器 http docs scipy org doc numpy dev reference generated numpy ufunc accumulate html numpy ufunc accumulate a
  • 身份和自定义表之间的多对多关系。 EF7 - 代码优先

    如何在 Identity 3 0 中的 AspNetRoles 和我的自定义表之间建立多对多关系 我想要简单的 3 个表 其中包含 PermissionId 和 RoleId 例如 AspNetUsersRole 我有这样的事情 publi
  • 如何从rails控制台获取详细的错误消息?

    假设我希望从控制台创建一个用户 其中包含电子邮件already存在 如果我做User create 由于模型验证 在这种情况下的独特性 create失败 rails 控制台中的输出将显示 rollback transaction 用户未保存
  • :has 与 :matches - 选择器级别 4

    只是想知道CSS 选择器4 伪选择器之间有什么区别 has and matches 规格http dev w3 org csswg selectors 4 overview http dev w3 org csswg selectors 4
  • 如何从 Jenkins 将节点应用程序部署到远程主机?

    这是节点应用程序目录根目录中的 Jenkins 文件 pipeline agent any triggers pollSCM stages stage deploy steps sh scp 我将 Jenkins 配置为连接到远程 gitl
  • 显示图像时出现奇怪的 matplotlib 行为

    当范围 0 255 内的常规 RGB 图像转换为 float 然后由 matplotlib 显示时 图像将显示为负数 如果它被转换为 uint8 它会正确显示 当然 这给我弄清楚发生了什么造成了一些麻烦 因为我不小心将其中一张图像投射为浮动
  • gpiod - 在设备树中使用标签

    我想用libgpiod通过自定义板上的用户空间控制一些 GPIO 我有一个 i MX6UL 处理器 它有数百个引脚 我将只使用其中 8 个 作为 GPIO 我读到了关于libgpiod因为它正在取代旧的 sysfs API 我很高兴您可以为
  • Summernote createRange 与 HTML

    我的 Summernote 编辑器中的某些文本包含 HTML 我想要让用户选择的文本与编辑器中的文本完全相同 到目前为止我看到的所有答案都告诉我使用这个 summernote summernote createRange toString
  • .NET MVC 4 WebAPI POST 不起作用

    核心问题 GET 有效 POST 无效 我是 WebAPI 的新手 所以我可能做了一些愚蠢的事情 但我在网上查了很多资料 试图找出为什么这不起作用 相当简单的 WebAPI C 应用程序 我试图将其简化为非常简单的路线 config Rou
  • X11 窗口调整大小时卡顿

    我正在 X11 中创建一个 openGL 窗口并使用glxswapbuffers用于双缓冲 问题是 渲染看起来不错 但在调整大小时 openGL 内容会跳来跳去 窗口边框会出现卡顿现象 我尝试过滤ConfigureNotify事件 延迟它们
  • Pandas `isin` 函数的更快替代方案

    我有一个非常大的数据框df看起来像 ID Value1 Value2 1345 3 2 332 1355 2 2 32 2346 1 0 11 3456 8 9 322 我有一个包含 ID 子集的列表ID list 我需要有一个子集df为了
  • ViewData 是 ASP.Net 5(核心)中 ViewBag 的新标准吗?

    我注意到 在我从 Microsoft 看到的 ASP Net 5 核心 的所有示例和教程中 VS 2015 中的默认 Web 应用程序模板使用 ViewData XXX 代替 ViewBag XXX 这是现在推荐的从控制器传递数据的方法吗
  • 角度附加组件到各个选项卡

    我正在尝试使用角度材料将组件 动态创建 附加到相应的选项卡 viewChild但只有当我单击第二个选项卡中的按钮时 它才会转到第一个选项卡 Here is Stackblitz 角度附加组件到各自的选项卡 https stackblitz
  • 在 Objective-C 中,如何从类别访问私有属性

    我想从类的类别中访问该类的私有属性 但要访问私有财产 我必须在类别中重新声明相同的私有财产 如果我不重新声明 我会收到编译错误 Property