博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在类别中声明属性
阅读量:7259 次
发布时间:2019-06-29

本文共 1210 字,大约阅读时间需要 4 分钟。

hot3.png

除了扩展之外,其他类别都无法向类中新增实例变量,所以,编译器无法把实现属性所需的实例变量合成出来。

从概念上讲,属性是封装数据的方式。类别是扩展类功能的手段,而非封装数据。因此,一般情况下应该避免把属性声明在类别中,而应该声明在“主接口”中。

如果不得不这么做的话,可以使用关联对象辅助实现:

////  NimoPerson+Friendship.h//  PersonDemo////  Created by Tony on 15/8/17.//  Copyright (c) 2015年 NimoWorks. All rights reserved.//#import "NimoPerson.h"@interface NimoPerson (Friendship)@property (nonatomic, strong) NSArray *friendsArray;@end

////  NimoPerson+Friendship.m//  PersonDemo////  Created by Tony on 15/8/17.//  Copyright (c) 2015年 NimoWorks. All rights reserved.//#import "NimoPerson+Friendship.h"#import 
static const char *kFriendsPropertyKey = "kFriendsPropertyKey";@implementation NimoPerson (Friendship)- (NSArray *)friendsArray {    return objc_getAssociatedObject(self, kFriendsPropertyKey);}- (void)setFriendsArray:(NSArray *)friendsArray{    objc_setAssociatedObject(self, kFriendsPropertyKey, friendsArray, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}@end

需要特别留意的是设置方法中的内存管理语义:

关联类型 等效的@property属性

OBJC_ASSOCIATION_ASSIGN

assign

OBJC_ASSOCIATION_RETAIN_NONATOMIC

nonatomic, retain

OBJC_ASSOCIATION_COPY_NONATOMIC

nonatomic, copy

OBJC_ASSOCIATION_RETAIN

retain

OBJC_ASSOCIATION_COPY

copy

转载于:https://my.oschina.net/fuzheng/blog/493487

你可能感兴趣的文章
原创 | 王欣:多维深耕打造数字化银行
查看>>
Node.js学习笔记1
查看>>
初入数据科学领域,你需要有七个这样的思维
查看>>
两个月的Java实习结束,继续努力
查看>>
AVKit 播放(AVFoundation, AVKit, 音视频, Swift 4, 配代码)
查看>>
vue中使用heatmapjs(结合百度地图)
查看>>
前端每日实战:141# 视频演示如何用 CSS 的 Grid 布局创作一枚小狗邮票
查看>>
浅谈 null & undefined
查看>>
Node.js 中流操作实践
查看>>
JavaScript 之 DOM [ 事件 ]
查看>>
Webpack Loader简析(一):基本概念
查看>>
[JS]《你不知道的Javascript·上》——对象
查看>>
Neditor 2.0.0 发布,移除后端代码,重写上传逻辑(ajax)
查看>>
使用kubeadm部署kubernetes集群
查看>>
集分享/支付/授权的社会化组件,交流一下
查看>>
【CSS练习】IT修真院--练习6-护工列表界面
查看>>
自定义字体混淆信息的自动化破解
查看>>
使用ABAP代码返回S/4HANA Material上维护的Attachment明细
查看>>
【跃迁之路】【513天】程序员高效学习方法论探索系列(实验阶段270-2018.07.03)...
查看>>
SAP云平台CloudFoundry中的用户自定义变量
查看>>