OC点语法、@property、@synthesize

本文详细解读了Objective-C中属性(@property)与编译器特性的应用,包括如何使用@property简化代码,理解@synthesize的底层原理,以及属性参数如内存管理、读写方式和多线程管理的使用。此外,文章还涵盖了属性的细节注意事项和手动实现setter和getter的方法。通过本篇文章,读者将能够更深入地理解和运用Objective-C中的属性机制。

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


 点语法(编译器特性)

原理,点语法的本质还是方法调用

1,实用举例
- (void)setAge:(int)age
{
NSLog(@"setAge:");
// 会引发死循环
self.age = age; // 相当于[self setAge:age];
}

- (int)age
{
NSLog(@"age");
// 会引发死循环
return self.age; // 相当于[self age];
}

2,成员变量的作用域
@public     在任何地方都能直接访问对象的成员变量
@private 只能在当前类的对象方法中直接访问(在.m文件里创建成员变量默认是@private)
@protected  能在当前类和子类的对象方法中直接访问 (在.h文件里默认就是@proteced)
@package    只要处在同一个框架中,就能直接访问对象的成员变量 (一般用不到)
@implementation 中不能定义和@interface中同名的成员变量
只在@implementation写类成员和方法也是可以的,不过一般不这样写,

3,继承补充
父类\超类 superclass
子类继承父类所有成员变量,不管是私有还是公有
Objective c为单继承

@property和@synthesize(编译器特性)

原理,
@property:可以自动生成某个成员变量的setter和getter声明
@synthesize: 可以自动生成成员变量的setter和getter的实现,并且会访问_成员变量。

1,简单写法
(1), 相同类型的时候可以写在一起,例如
@property int speed,wheels;
(2),用@property的时候成员变量可以省略。自动生成成员变量,默认前面加符号下划线_。
(3),用@property的时候@synthesize也可以省略。自动在@implementation生成set和get的实现。
         只用@property创建的成员变量默认是私有的,如果要在子类里面用到成员变量,只能明显的在interface里面写上成员变量,注意前面加上下划线_.

2,细节注意
(1)@synthesize age = _age
> seter和getter实现中访问的成员变量是_age,如果_age不存在,就会自动生成一个@private的成员变量age
(2)@synthesize age
> seter和getter实现中默认访问age成员变量而不是_age,如果成员变量age不存在,就会自动生成一个@private的成员变量age.

3,手动实现
(1),若手动实现了setter方法,编译器就只会自动生成getter方法
(2),若手动实现了getter方法,编译器就只会自动生成setter方法
(3),若同时手动实现setter和getter方法,编译器就不会自动生成不存在的成员变量。

property参数

1,property中set方法内存管理相关的参数
(1),retain : release旧值,retain新值(适用于OC对象类型)
(2),assign : 直接赋值(默认,适用于非OC对象类型)
(3),copy   : release旧值,copy新值

2,是否要生成set方法
(1),readwrite : 同时生成sette和getter的生命、实现
(2),readonly  : 只会生成getter的声明、实现

3,多线程管理
> nonatomic : 性能高(一般就用这个)
> atomic    : 性能低(默认)

4,setter和getter方法的名称

(1),@property (getter = abc,setter = aetAbc:)int weight;// setter方法的名称一定要有个冒号:

(2),常用语BOOL类型成员,例如@property (getter = isRich) BOOL rich;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值