黑马程序员_Objective C中的@property 与 @synthesize 快速生成setter getter方法
来源:互联网 发布:mfc串口接收数据 编辑:程序博客网 时间:2024/05/21 15:40
<a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流!
一般来说在一个类中 成员变量是会有setter 跟getter方法的。
如果每一个成员变量的setter 跟getter方法都要手写出来的话 很麻烦 很耗时
而且 大部分setter 跟getter方法内容都是简单的赋值 跟return
所以 有些成员变量 没必要手写setter 跟getter方法
@property int age;
这句话代表着 声明setAge:(int)age; 方法与 (int)age方法
@synthesize age = _age;
这句话代表着 实现以上的2个方法 并且访问成员变量_age
如果_age不存在 就会自动生成private成员变量_age
但是在现在的版本中 @property 已经可以 既声明又实现 所以 synthesize 已经用不到了
当然 这只是@property 最初级的用法
1、有时候我们不想声明set方法 可以通过@property来控制
@property (readonly) int age; //这是代表着 只读 也就是只有getter方法 没有setter方法
@property (readwrite) int age;//这种形式代表着 getter、setter方法都有
2、当我们使用oc对象时 需要手动控制内存计数器
比如 对一个oc对象 调用set方法
(void) setBook : (Book *) book
{
if(book!=_book) //需要判断 是否与已有的book相同 若不相同的话则覆盖以前的book对象
{
[ _book release]; // 先对前任book 的计数器减一
_book = book; //覆盖 _book指向的内存地址
[ _book retain];// 对_book现在指向的对象 计数器+1
}
}
这样写 才不会出现内存泄露的问题
但是这些代码完全可以用一句话来代替
@property (retain) Book *book; // 这句话生成上面的方法 适用于oc对象
@property(assign) int age; //这是默认的形式 适用于非oc对象
3、有关多线程管理的问题
oc中 并没有把多线程的问题显露出来 而是对其进行了进一步封装
@property(nonatomic) int age; //代表这高性能
@property(atomic) int age; //这是默认的形式 性能低 在oc项目中一般使用高性能的
4、 setter getter方法的名称生成
@property int age; //这句话生成的名称是系统默认的 setAge: 与 age
但是我们如果不想用 默认名称的话 可以自己设置
@property(getter = abc,setter = setAbc:) int age;
这句话生成的get方法就是 abc
[p setAbc:100];
[p abc];
以上的这些关键词 都可以混着用
@property (readonly, assign) int age;
@property (nonatomic, retain) int age;
在第二条内存管理中 还涉及到一种 循环引用的问题
有两个类 Person 与Card
在Person类中 使用了 Card对象 property(nonatomic,retain) Card* card;
在Card类中使用了Person对象 property(nonatomic,retain) Person *p;
p与card都是oc对象 所以按照上面的规则 应该 使用retain关键词
但是这样的话 就会导致在使用的时候 p与card无法释放
所以 就不能这样写
解决方法是: 一端用retain 一端用assign
把property(nonatomic,retain) Person *p;
改成property(nonatomic,assign) Person *p;即可
<a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流!
- 黑马程序员_Objective C中的@property 与 @synthesize 快速生成setter getter方法
- 黑马程序员_Objective C中的@property 与 @synthesize 快速生成setter getter方法
- setter,getter,@property,@synthesize
- object c @synthesize 自动生成setter,getter方法
- C语言 @property和@synthesize搭配使用声明和实现getter和setter方法
- 生成getter与setter方法
- OC - @property与setter,getter方法
- <黑马程序员>setter方法和getter方法
- 黑马程序员_Objective C 类与协议
- [iOS] getter and setter, @property and @synthesize
- 快速生成java中的setter和getter
- 黑马程序员-OC-getter & Setter方法
- JavaIDE_MyEclipse 快速生成 getter setter 方法
- 生成getter与setter的方法
- @property简化setter、getter方法
- 黑马程序员_Objective-C基础知识
- 黑马程序员---Objective-C @property和@synthesize
- 黑马程序员-@property与@synthesize的用法
- 几种类的sizeof
- 计数排序
- Android 数据库升级解决方案
- Android开发模板------再按一次退出程序 KeyEvent.KEYCODE_BACK
- 使用Xcode和Instruments调试解决iOS内存泄露
- 黑马程序员_Objective C中的@property 与 @synthesize 快速生成setter getter方法
- sun.misc.BASE64Encoder找不到jar包的解决方法
- pgsql布尔值
- C++primer Plus第六版答案4.13.4
- IOS 为app添加测试真机UDID
- javascript介绍及其简单例子(4)
- 使用CocosBuilder制作一个跳跃小游戏
- 友元
- 使用printf向串口输出数据