探究@property、@synthesize、@dynamic、readonly在类、分类、协议中的作用

本文详细解析了Objective-C中属性的各种使用方式,包括不同属性修饰符的作用及如何影响属性的实现,如@dynamic、@synthesize等,并通过示例代码展示了具体的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@protocol StudentProtocol

/**
 在类里只会生成setter、getter方法的声明,
 系统将不会自动生成对应属性的setter、getter方法的实现和成员变量
 */
@property (nonatomic, assign) NSInteger age;

@end



@interface Student : NSObject <StudentProtocol>

//打印日志
+ (void)printTestInfo;

/**
 1.生成属性name
 2.生成name的setter、getter方法的声明
 3.生成name的setter、getter方法的实现
 4.生成_name成员变量
 */
@property (nonatomic, strong) NSString *name;

/**
 同时重写属性的setter、getter
 系统将不会自动生成成员变量
 */
@property (nonatomic, assign) CGFloat height;

/**
 系统会自动生成_weight和getter方法
 */
@property (nonatomic, assign, readonly) CGFloat weight;

/**
 @synthesize emil;
 生成属性emil的成员变量emil(注意没有下划线)和setter、getter方法的实现
 */
@property (nonatomic, strong) NSString *emil;

/**
 @synthesize tel=_tel;
 生成属性tel的成员变量_tel和setter、getter方法的实现
 */
@property (nonatomic, strong) NSString *tel;

/**
 @dynamic sex
 只会生成setter、getter方法的声明,
 系统将不会自动生成对应属性的setter、getter方法的实现和成员变量
 */
@property (nonatomic, assign) BOOL sex;

- (void)studying;


@end


@interface Student (Category)

/**
 只会生成setter、getter方法的声明,
 系统将不会自动生成对应属性的setter、getter方法的实现和成员变量
 */
@property (nonatomic, strong) NSString *address;

@end

demo里用runtime获取对象的属性列表和成员变量列表进行验证,可下载下来看。。。

github地址:https://github.com/jiliuliu/FoundationOC

转载于:https://www.cnblogs.com/six6/p/8213785.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值