1.对象之间的内存管理:

每个学生都有一本书

book类 @price

学生类  @age

@book

--------------------

#import "book.h"

@interface Student:NSObject

@property int age

@property BOOK *book;//OC类名与*离不开

@end

-------------

Student.m文件

#import "Student.h"

@implementation Student

- (id)initWithAge:(int)age{

if(self=[super init]){

_age=age;

}

return self;

}

-(void)dealloc{

NSLog(@"student:%i 被销毁了",_age);

[super dealloc];

}

@end

--------------------------

command+B->编译

注释方法:

1 #pragma  mark 注释

可以快速定位到注释那里。

2私有方法,直接在.m文件中实现不用.h中声明

方法分类:生命周期,私有方法,公共方法

#pragma mark - 生命周期方法(组名) 然后会分层

#pragma mark 单独给一个方法注释

-------------------------------------------------

如果自己手动实现了getter和setter,Xcode就不会自动生成@synthesize,也就不会自动生成_book。

----------------------------------------------------

谁创建谁释放,谁调用谁返回。

retain 到另一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1,也就是说,retain是指针拷贝,copy是内容拷贝。在拷贝之前,都会释放旧的对象。

assign:简单赋值,不更改索引计数(Reference Counting)。

copy:建立一个索引计数为1的对象,然后释放旧对象

retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的输入对象的索引计数为1

使用assign:对基础数据类型(NSInteger)和C数据类型(int ,float,double,char等)

使用copy:对NSString

使用retain:对其他NSObject和其子类。

------------------------------------------------------

所以讲了半天就是有一个Student想要一本Book

所以就调用book对象,在Student内部

-(void)setBook:(Book *)book{

_book=[book retain];

}

来retain book

在释放student的

-(void)dealloc{

[_book realease];          //[self.book release]一样的

}

释放Book对象。

--------------------------------------------------

因为student计数器变为0 所以调用的alloc 方法,所以会调用[book release]

------------------------------------------------------

当有两本书的时候就会发生第一本书的内存泄露,所以代码改为

-(void)setBook:(Book *)book{

[_book release];            //释放之前的book。

_book=[bool retain];    //再持有新传进来的对象。

}

oc没有空指针错误,所以没有前面一本book就没关系。

-----------------------------------------------------

利用一个空指针去调用和利用野指针调用有什么区别?

野:指向已经被释放内存的指针(你不该访问的内存)

空:没有指向任何对象的指针

1.野指针会报错,空指针不会报错

野指针还是存在指针的(因为还在存储地址,但是那块内不对了)

stu=nil; //就好了,清空指针。

----------------------------------------------------------------

总结

1 基本数据类型自动释放

2最终结果

-(void)setBook:(Book *)book{

if(_book!=book){      //传进来的book不是当前的book才进行release

[_book release];            //释放之前的book。

_book=[bool retain];    //再持有新传进来的对象。

}

}

内存管理2-set方法的内存管理的更多相关文章

  1. 七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 4.@property参数 5.@class和循环retain的使用 6.NSString的内存管理

    1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程 ...

  2. 分享.net常见的内存泄露及解决方法

    分享.net常见的内存泄露及解决方法 关于内存泄漏的问题,之前也为大家介绍过,比如:<C++中内存泄漏的检测方法介绍>,是关于C++内存泄漏的.今天为大家介绍的是关于.NET内存泄漏的问题 ...

  3. 关于内存管理/set/get方法

    MRC状态下 1 任何继承NSObject的对象,存放于堆控件中,都需要手动管理内存 .2 基本数据类型放到栈中,对象放到堆空间中,内存是有系统管理的.(int\float\enum\struct) ...

  4. OC中的属性、方法及内存管理

    普通方法:关注(代表)对象可以”干什么”,过程中需要实例变量.-(void)show;输出 … 访问属性    属性:属性专门处理实例变量.(程序执行过程当中)    初始化方法:一创建对象(第一时间 ...

  5. OC:内存管理、dealloc方法、copy知识点

    属性的声明:使⽤@property声明属性
 例如:@property NSString *name: 相当于@interface中声明了两个⽅法(setter.getter): 属性的实现:使⽤@s ...

  6. set方法的内存管理细节

    一.多个对象之间的内存管理 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次releas ...

  7. Android内存管理(5)*官方教程:Logcat内存日志各字段含义,查看当前内存快照,跟踪记录内存分配,用adb查看内存情况时各行列的含义,捕获内存快照的3种方法,如何让程序暴漏内存泄漏的方法

    Investigating Your RAM Usage In this document Interpreting Log Messages                 内存分析日志中各消息的含 ...

  8. 【转载】Unity 优雅地管理资源,减少占用内存,优化游戏

    转自:星辰的<Unity3D占用内存太大的解决方法> 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D  ...

  9. DPDK内存管理-----(二)rte_mempool内存管理

    DPDK以两种方式对外提供内存管理方法,一个是rte_mempool,主要用于网卡数据包的收发:一个是rte_malloc,主要为应用程序提供内存使用接口.本文讨论rte_mempool.rte_me ...

  10. iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存

    iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码 // 1.对要传入的"新车"对象car和目前Person类对象所拥有 ...

随机推荐

  1. R|批量循环处理同一格式文件-csv,txt,excel

    本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/8IfMrSr9xc8_1Y2_9Ne6hg 在一个文件夹下有很多字段一致,格式统一的数据文件(csv,txt ...

  2. Angularjs 省市区级联

    Json 地区文件:http://blog.csdn.net/youshi520000/article/details/70808580 angularjs angular.module('app') ...

  3. 用Altium Designer16 绘制STM32开发板PCB 笔记

    第一部分 Altium designer 软件概括 一.安装:要安装英文版,只安装pcb design和importers/exporters 二.设置:dxp-preferences我们关心的是sy ...

  4. 认识:before和:after伪类

    有时候,我们需要大量的重复代码去实现一个非常简单的功能,这不仅浪费时间,而且效率低下,例如: <div class="aa">你好</div><div ...

  5. 用jq动态给导航菜单添加active

    点击后页面跳转到了新的链接,找到所有的li下的a标签,对其链接地址进行判断,如果和当前浏览器的地址一致,就认为是当前应该激活的菜单,添加active类,否则就取消. <ul class=&quo ...

  6. string和char*

    string转const char* string s = "hello furong."; const char *c = s.c_str(); string转char* str ...

  7. vue——store全局存储

    业务场景:刷新页面时,首次拉取所有配置,存储到store状态管理用于全局调用: import Vue from 'vue' import Vuex from 'vuex' import userInf ...

  8. 【问题】redhat安装dig

    转自:https://blog.csdn.net/ricky_hust/article/details/8868131 最终可行的方法 在linux下没有单独的dig和nslookup的包,而是以bi ...

  9. JVM内存空间划分与作用详解

    在之前已经对Java的字节码进行了非常详细而又系统的学习了,接下来开启jvm内存相关的新篇章,在一个新知识开头之前肯定得理论化的对其进行一个整体的介绍,所以摒弃浮躁,先来看看相关的理论,主要是看一下J ...

  10. Java基础 IO流的文件和目录的五类主要操作

    笔记: /** IO流的 文件和目录的操作 * 1.路径需要 需要两个反斜杠 或者一个单斜杠! * 绝对路径:包括盘符在内的完整的路径名! * 相对路径:在当前目录文件下的路径! * 2.File 是 ...