iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码

// 1.对要传入的"新车"对象car和目前Person类对象所拥有的"旧车"_car进行判读
- (void)setCar:(Car *)car
{
if (_car != car ) {
[_car release]; // 释放旧车
_car = [car retain]; // 新车引用计数加一
}
}
// 2.Person类在回收的时候也必须将它所拥有的车对象回收
- (void)dealloc
{
// Person对象被回收 那么将Person类对象拥有的Car对象_car对象也应该被回收
[_car release];
[super dealloc];
}

如果有很多个类要被引用那要写很多类似的代码,那么可以用@Property来自动生成上面的代码,但是必须借助@Property的参数,可分为四种类型:

1.set方法内存管理相关的参数

retain:用于任何OC对象类型,可以自动生成set方法中管理内存的代码,作用和上面示例中的set方法中的代码作用一致

assign:用于任何非OC对象,比如:枚举、结构和基本数据类型,可以自动生成set方法不涉及管理内存操作

copy:release旧值,copy新值一般用于NSString

2.是否要生成set方法参数

readwrite:同时生成get、set方法的声明、实现(默认)

readonly:只会生成get方法的声明和实现

3.多线程管理参数

nonatomic:性能比较高(一般用它)

atomic:性能低(默认)

4.是否为sett和get方法重命名

@property (getter = getAge,setter = setAge:) int age;  // 在定义属性的时候可以自定义get/set方法的名 set方法一定要加冒号

// 这个参数主要用于BOOL类型在调用get方法的时候 方法名最好以is开头
@property (getter = isRich) BOOL rich; // 返回是否富有 那么get方法最好以is开头
BOOL b = person.isRich;

5.总结:在内存管理中常用的写法如下

@property (nonatomic,retain) NSString *name;
@property (nonatomic,retain) Book *book;
@property (nonatomic,assign) int age;

它的作用如下面代码:

// 1.对要传入的"新车"对象car和目前Person类对象所拥有的"旧车"_car进行判读
- (void)setCar:(Car *)car
{
if (_car != car ) {
[_car release]; // 释放旧车
_car = [car retain]; // 新车引用计数加一
}
}

可以看出:@propery已经实现了,OC对象在set方法中一部分的内存管理,但是还是没有完全回收对象如下代码的作用就没有体现

// 2.Person类在回收的时候也必须将它所拥有的车对象回收
- (void)dealloc
{
// Person对象被回收 那么将Person类对象拥有的Car对象_car对象也应该被回收
[_car release];
[super dealloc];
}

那怎么办呢?

iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存的更多相关文章

  1. iOS 非ARC基本内存管理系列 -手把手教你ARC——iOS/Mac开发ARC入门和使用(转)

    手把手教你ARC——iOS/Mac开发ARC入门和使用 Revolution of Objective-c 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流 ...

  2. iOS 非ARC基本内存管理系列总结6 -设计微博模型

    设计简单的微博模型:用User类和Status类来模拟实现 在非ARC机制下有两种方式,两者没有太大的区别之所以写了两种只是为了方便学习和对比两种写法! 第一种:没有使用atuorelease和自动释 ...

  3. iOS 非ARC基本内存管理系列 2-多对象内存管理(1)

    单个对象的内存管理非常简单无非就是alloc对应release,retain对应release.但是如果涉及到很多对象,而且对象与对象有联系的时候该怎么去管理对象的内存呢. 比如同样一本书有好3个人购 ...

  4. iOS 非ARC基本内存管理系列 1-引用计数器

    1.什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用的对象.变量 ...

  5. iOS 非ARC基本内存管理系列 5-autorelease方法使用总结

    autorelase:可以将对象交给自动释放池中,释放池销毁的时候对里面的对象做一次release操作代码如下 @autoreleasepool { Person *person = [[[Perso ...

  6. iOS 非ARC基本内存管理系列 4-autorelease方法和@autoreleasepool

    1.autorelease 基本用法 对象执行autorelease方法时会将对象添加到自动释放池中 当自动释放池销毁时自动释放池中所有对象作release操作 对象执行autorelease方法后自 ...

  7. iOS 非ARC基本内存管理系列 2-多对象内存管理(2)

    /* 多对象内存管理: 以人拥有车为例涉及到@property底层set方法管理内存的实现 注意:人在换车的时候要进行当前传入的车和人所拥有的车进行判断 */ /******************* ...

  8. iOS 非ARC基本内存管理系列 3-循环retain和@class

    1.@class 使用场景:对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类: 可以看出Person和Card互相引用,此时如果使用#import编译报错!因此当使用@class在两个类中相 ...

  9. IOS 非ARC开发内存管理的几条规则

    关于ios内存管理.在开发过程中,内存管理很重要,我简单说明一下. 1.正确用法 UIView *v = [[UIView alloc] init]; //分配后引用计数为1 [self.view a ...

随机推荐

  1. [Angular 2] *ngFor

    heros.ts: import {Component} from "@angular/core"; const HEROES = [ {id: 1, name:'Superman ...

  2. 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现--转

    TreeMap 和 TreeSet 是 Java Collection Framework 的两个重要成员,其中 TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常 ...

  3. Redis 键(key)

      Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: redis 127.0.0.1:6379> COMMAND KEY_NAME 实例 redis 12 ...

  4. JAVAMAIL手动发送邮件

    telnet smtp.sina.com 25ehlo hncu/*ehlo命令是SMTP邮件发送程序与SMTP邮件接收程序建立连接后必须发送的第一条SMTP命令,参数<domain>表示 ...

  5. Android客户端token简介和简单应用

    一.什么是Token Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数 ...

  6. 贴心小技能——纯CSS实现的帮助提示

    1. 新技能传授---哒哒哒哒 我们经常会接到这样的小需求,鼠标放在某个位置实现一段小提示. 你还在用js实现这样一个小功能,你就太out了,来看看我们用纯CSS打造的帮助提示. 2. html &l ...

  7. 用python理解web并发模型

    最简单的并发 import socket response = 'HTTP/1.1 200 OK\r\nConnection:Close\r\nContent-Length:11\r\n\r\nHel ...

  8. logstash jdbc 各种数据库配置

    MySQL数据库 Driver ="path/to/jdbc-drivers/mysql-connector-java-5.1.35-bin.jar"   //驱动程序Class ...

  9. [转]Speeding Up Websites With YSlow

    本文转自:http://net.tutsplus.com/tutorials/other/speeding-up-websites-with-yslow/ We all know there are ...

  10. [转]让ORACLE LIKE 时不区分大小写

    本文转自:http://hi.baidu.com/dosttyy/item/9073803df47ef9f62784f49a 让ORACLE LIKE 时不区分大小写: select * from t ...