芒果iOS开发之内存管理二

/********** OC第十讲内存管理 **********/

主要内容

 1.属性的内部实现原理

 2.dealloc内释放实例变量

 3.便利构造器方法的实现原理

 4.collection内存管理

 

/******* 1.属性的内部实现原理  ********/

       /*

        属性的语义设置以及使用范围

        1.assign

        2.retian

        3.copy

        */


//把对象类型的属性语义设置成assign

        //person1的引用计数为1

        Person *person1 = [[Person alloc] init];

        //sexretainCount1

        NSString *sex = [[NSString alloc] initWithFormat:@"%@",@""];

        NSLog(@"sex.retainCount = %lu", sex.retainCount);

        person1.gender = sex; //等价于 [person1 setGender:sex];

        //对象在使用完之后就需要释放

        [sex release];

        //sexretainCount0,此时已被dealloc方法释放,再访问该对象就会引起野指针访问异常

        NSLog(@"sex = %@", person1.gender);

        [person1 release];

        

//把对象类型的属性语义设置成reatin


        //person2retaincount1

        Person *person2 = [[Person alloc] init];

        //name此时的retaincount也是1

        NSString *xingming = [NSString stringWithFormat:@"%@",@"周杰伦"];

        NSLog(@"xingming.retainCount = %lu", xingming.retainCount);

        //person2的属性name语义关键字是retain,也就是会持有xingming,让xingming的引用计数又+1,此时xingmingretaincount2

        person2.name = xingming;

        NSLog(@"xingming.retainCount = %lu", xingming.retainCount);

        //当我们不需要的时候就释放自己得所有权。

        [xingming release];     //release之后引用计数-1

        NSLog(@"xingming.retainCount = %lu", xingming.retainCount);

        //person2释放的时候,会连带xingming的所有权也释放掉,此时xingming的引用计数变成0,会系统自动释放

        [person2 release];


//打印结果

2015-11-16 11:14:28.251 OC-LessionTen[1170:51432] xingming.retainCount = 1

2015-11-16 11:14:28.251 OC-LessionTen[1170:51432] xingming.retainCount = 2

2015-11-16 11:14:28.251 OC-LessionTen[1170:51432] xingming.retainCount = 1


当person2释放的时候,同时释放掉xingming的所有权,那么xingming也会被释放掉。











http://www.niftyadmin.cn/n/704010.html

相关文章

芒果iOS开发之OC复习总结

OC课程总结 一、类和对象 1.类是具有相同特征和行为的事物的抽象,对象是类的具体化,类是对象的类型。 2.类和对象是面向对象编程的核心,分析问题组成的对象协调对象间的联系和通信,解决问题。 3.解决问题的时候是解决每个步骤…

芒果iOS开发之Xcode安装Empty Application

相信用过Xcode6.0之前版本的开发人员都会有一个疑惑,苹果从Xcod的6.0之后就取消了Empty Applicate也就是空工程的创建。也就是下边这个图标: 空工程没有之后取而代之的是Single View Application。也就是创建出来之后有一个页面的工程。但是肯定会有很多…

芒果iOS开发bug调试技巧之Debug View Hierarchy

在Xcode 6更新之后,苹果给广大开发者带来一项重量级的bug调试功能:Debug View Hierarchy(视图层级调试),以后就不需要再使用第三方的软件去查看视图层级了。 曾几何时我们都用Reveal去查看我们代码中的视图问题。虽然…

java实现二叉树遍历

二叉树的遍历是对二叉树的一种基本操作,一般可以分为递归遍历和非递归遍历,本文就直接贴代码了,二叉树图如下: 先贴树节点实体类: package structure;import lombok.Data;/*** 节点实例* Created by xujia on 2019/5/…

芒果iOS开发UI课程第一节UIWindow

主要内容: 1.iOS介绍 2.iOS主要做什么 3.UI介绍 4.UIWindow 这是UI阶段的第一节课主要介绍iOS系统,以及相关的一些知识。还有做为iOS开发者我们应该如何创建我们的第一个UI程序。 iOS介绍: iOS是苹果公司的移动操作系统,主要…

发布npm的scope包

前言 最近新装了vue-cli3,发现node_modules里面的包变成了vue/cli-xxx,vue下面包含了好几个文件夹,这个是什么意思?查了下npm官网上是这么描述的 All npm packages have a name. Some package names also have a scope. A scope f…

芒果iOS开发之通过RGB值设置背景颜色

平常我们在公司开发的时候,UI设计狮们并不会让程序猿直接把某些界面的颜色直接设置成系统预先设置好的redColor、yellowColor...等等的颜色,设计狮们往往会给我们一个RGB的三个色值,或者给我们一张图片去显示。那么咱们平常设置颜色就无法满足…

Arthas在线诊断工具介绍

目录 前言 使用场景 Arthas简介 Arthas安装 Arthas使用 Arthas命令 jad watch trace 前言 每当用户现场出bug,本地环境还复现不了时,唯一的办法就是疯狂打日志一步步排查。亦或是遇到Dubbo超时问题时需要具体排查耗时较大的方法,而…