//
// Person.h #import <Foundation/Foundation.h>
#import "Room.h"
#import "Car.h"
#import "Dog.h" @interface Person : NSObject
{
Room *_room;
Car *_car;
Dog *_dog;
}
/*
- (void)setRoom:(Room *)room;
- (void)setCar:(Car *)car;
- (void)setDog:(Dog *)dog; - (Room *)room;
- (Car *)car;
- (Dog *)dog;
*/
@property(nonatomic, retain) Room *room;//标准写法都是(nonatomic, retain) /*
写了retain就可以生成:
- (void)setRoom:(Room *)room
{
// 1.判断传入的对象和当前对象是否一样
if (_room != room) {
// 2.release以前的对象
[_room release];
// 3.retain传入的对象
_room = [room retain];
}
}
*/ /*
readonly: 只会生成getter方法
readwrite: 既会生成getter也会生成setter, 默认什么都不写就是readwrite getter: 可以给生成的getter方法起一个名称
setter: 可以给生成的setter方法起一个名称 retain: 就会自动帮我们生成getter/setter方法内存管理的代码,上次44,45的内容
assign: 不会帮我们生成set方法内存管理的代码, 仅仅只会生成普通的getter/setter方法, 默认什么都不写就是assign。 多线程
atomic :性能低(默认)
nonatomic :性能高
在iOS开发中99.99%都是写nonatomic,因为手机性能低。 atomic用于pc开发中。
*/
@end
//
// Person.m #import "Person.h" @implementation Person /*
- (void)setRoom:(Room *)room
{
// 1.判断传入的对象和当前对象是否一样
if (_room != room) {
// 2.release以前的对象
[_room release];
// 3.retain传入的对象
_room = [room retain];
}
}
- (void)setCar:(Car *)car
{
if (_car != car) {
[_car release];
_car = [car retain];
}
}
- (void)setDog:(Dog *)dog
{
if (_dog != dog) {
[_dog release];
_dog = [dog retain];
}
} - (Room *)room
{
return _room;
}
- (Car *)car
{
return _car;
}
- (Dog *)dog
{
return _dog;
}
*/ - (void)dealloc
{
[_room release];
[_car release];
[_dog release]; NSLog(@"%s", __func__);
[super dealloc];
}
@end
//
// main.m
// property修饰符 #import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[]) { Person *p = [Person new]; Room *r = [Room new]; /*
// Car *c =[Car new];
// Dog *d = [Dog new]; // p.room = r;
// p.car = c;
// p.dog = d; // [d release];
// [c release];
// [r release];
// [p release];
*/ p.room = r;
[r release]; // 换房了, 如果set方法中没有release旧值, 就会内存泄露
Room *r2 = [Room new];
p.room = r2;
[r2 release]; // 重复赋值
p.room = r; [p release];
return ;
}

最新文章

  1. virtualbox linux虚拟机相关
  2. EO.Pdf 去水印版本,需要的自取
  3. Bootstrap之BootstrapDialog
  4. Dynamic CRM 2013学习笔记(三十八)流程1 - 操作(action)开发与配置详解
  5. Linux PHP增加JSON支持及如何使用JSON
  6. Maya QT interfaces in a class
  7. [LeetCode]题解(python):069-Sqrt(x)
  8. HDU 2209 翻纸牌游戏
  9. ubuntu升级php版本
  10. 掌上快递 APP 项目之概述篇
  11. JS浅谈原始值与引用值操作
  12. 【APP测试(Android)】--交叉事件
  13. gnome extensions 推荐 (fedora 28 常用gnome 插件备份)
  14. python随笔(一)
  15. 006Spring面向切面
  16. C# Winform Label内容根据其宽度自动调整字体大小
  17. 迷宫问题求解——C++
  18. weblogic控制台的启动与禁用
  19. EChars文档
  20. C#:设置webBrowser框架与系统相对应的IE内核版本

热门文章

  1. 电源管理POWER_SUPPLY_PROP_CAPACITY_LEVEL
  2. SQL Server建库-建表-建约束
  3. Cuder - 用C++11封装的CUDA类
  4. Java多线程学习笔记(三)——Future和FutureTask
  5. PHP 之simple_html_dom实现网页数据采集
  6. Java中的接口详解
  7. 解决hibernate删除时的异常 deleted object would be re-saved by cascade (remove deleted object from associa
  8. c# 图片资料
  9. list.h在用户态下的应用
  10. 7-9 旅游规划 (25 分)(Dijkstra算法)