分类添加属性之关联引用

分类是不能合成属性的,因为合成属性会生成对应的实例变量,而分类是不允许添加实例变量的(实例变量所在内存区域已初始化为不可更改,无法在动态运行时修改之)。

虽然不能增加实例变量,但是添加属性还是可以的,只不过需要自己在分类中实现get和set方法,同时标记属性为动态获取。

其中一种方法叫做关联引用,实现了用存取器来访问属性,当然实际上并没有实例变量,所以本质上只不过是增加了两个方法而已。

首先在.h中声明属性:

#import <UIKit/UIKit.h>

@interface UIViewController (PropertyTest)
@property (nonatomic, copy) NSString *testProperty;
@end
然后在.m中实现:

#import "UIViewController+PropertyTest.h"
#import <objc/runtime.h>

const char kTestProperty;//声明一个唯一地址的key。或用static char <span style="font-family: Arial, Helvetica, sans-serif;">kTestProperty;</span>

@implementation UIViewController (PropertyTest)

@dynamic testProperty;//运行时动态获取

- (void)setTestProperty:(NSString *)testProperty{
    objc_setAssociatedObject(self, &kTestProperty, testProperty, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)testProperty{
    return objc_getAssociatedObject(self, &kTestProperty);
}

@end
然后用代码测试一下:

self.testProperty = @"testProperty";
    self.testProperty = [self.testProperty stringByAppendingString:@"add string"];
    NSLog(@"%@", self.testProperty);
打印如下:

2015-05-17 15:12:36.816 Test_5_17[3508:1209580] testPropertyadd string
可见实现了属性的get和set功能。

<think>嗯,用户想了解高校二手商品交易平台中分类实体及其属性的设计方案。首先,我需要回顾一下系统设计中的实体属性定义方法。分类实体通常用于组织商品,方便用户浏览和管理。 根据引用中的信息,比如引用[1]提到平台需要管理发布的二手商品,引用[2]和[3]也提到管理员需要处理商品信息。这说明分类实体需要支持层级结构,比如一级分类和二级分类,以便更细致地划分商品别。 属性方面,分类ID是必须的,作为主键。分类名称要明确,比如书籍、电子产品。父级ID用来实现多级分类,比如电子产品下可以有手机、电脑。排序号用于前端展示的顺序控制。状态属性可以控制分类是否可用。图标字段可能用于前端显示分类的图标,增加用户体验。描述字段帮助管理员理解分类用途。 另外,考虑到扩展性,可能还需要创建时间和更新时间,记录分类的修改历史。在数据库设计中,使用外键关联父级ID,确保数据完整性。例如,分类表可以设计成自关联的结构,父级ID指向同一表中的分类ID。 还需要考虑用户和管理员的操作需求。比如管理员添加分类时,需要选择父级分类,输入名称、排序号等信息。状态字段可以让管理员临时下架某个分类,而不删除数据。 可能的问题包括如何处理无限级分类,但通常二级或三级分类已经足够,避免结构过于复杂。另外,分类属性的扩展,比如是否允许用户自定义标签,但根据引用中的内容,系统设计更倾向于预定义分类,由管理员管理,确保规范性。 总结下来,分类实体的核心属性应包括标识、名称、层级关系、状态、排序等,数据库设计需支持这些属性的存储和高效查询,同时结合业务需求进行优化。</think>### 高校二手商品交易平台中分类实体设计方案 #### 一、分类实体核心属性 1. **分类ID** - 唯一标识符,主键,采用自增整数或UUID格式 - 示例:`category_id INT AUTO_INCREMENT` 2. **分类名称** - 用于前端展示的分类标签,需设置唯一性约束 - 示例:`category_name VARCHAR(20) NOT NULL UNIQUE`(如"书籍/电子产品/服饰") 3. **父级分类ID** - 实现多级分类结构的外键,空值表示一级分类 - 示例:`parent_id INT DEFAULT NULL` 4. **分类层级** - 标记当前分类层级(1级/2级),控制展示深度 - 示例:`level TINYINT DEFAULT 1` 5. **排序权重** - 控制前端展示顺序的数值型字段 - 示例:`sort_order INT DEFAULT 0` 6. **状态标识** - 布尔型字段控制分类启用/禁用状态 - 示例:`is_active BOOLEAN DEFAULT TRUE` #### 二、扩展属性(可选) 1. **分类图标** - 存储分类图标的URL地址 - 示例:`icon_url VARCHAR(255)` 2. **分类描述** - 用于后台管理的备注信息 - 示例:`description TEXT` 3. **创建时间** - 记录分类创建时间戳 - 示例:`created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP` #### 三、数据库表结构示例 ```sql CREATE TABLE product_category ( category_id INT PRIMARY KEY AUTO_INCREMENT, category_name VARCHAR(20) NOT NULL UNIQUE, parent_id INT, level TINYINT NOT NULL CHECK(level IN (1,2)), sort_order INT DEFAULT 0, is_active BOOLEAN DEFAULT TRUE, icon_url VARCHAR(255), description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (parent_id) REFERENCES product_category(category_id) ); ``` #### 四、业务逻辑设计要点 1. **层级嵌套** - 推荐采用二级分类结构(如:一级"电子产品"→二级"手机/笔记本电脑")[^3] 2. **状态管理** - 禁用分类时需同步隐藏关联商品[^2] 3. **排序优化** - 结合`sort_order`字段实现拖拽排序功能 4. **数据关联** - 商品表中通过`category_id`外键关联分类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值