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. MD5加密处理

    无论传送过程和存储方式,都是以明文的方式,很不安全!一旦泄漏,将会造成很大的损失! 插件名称jQuery.MD5.js: /** * jQuery MD5 hash algorithm functio ...

  2. docker网络相关

    1.网卡有namespace的概念,不同的俩个namesp之间的网卡不能直接通信 为了俩个namespace的网卡相互通信,可以通过veth pair(一对)来实现.不同容器之间,便是通过veth p ...

  3. 【轻松一刻】Java制作字符动画

    前言 今晚闲来无事,整理了一下电脑中尘封已久的旧代码,看着那些年自己写过的代码,踩过的坑,顿时老泪纵横.正当在感叹之际,突然发现在“马克思”文件夹下出现了一个好玩的项目,那就是N年前刚学Java时写的 ...

  4. C++ 虚函数相关

    多态 C++的封装.继承和多态三大特性,封装没什么好说的,就是把事务属性和操作抽象成为类,在用类去实例化对象,从而对象可以使用操作/管理使用它的属性. 至于继承,和多态密不可分.基类可以进行派生,而派 ...

  5. 什么?在SAP中国研究院里还需要会PHP开发?

    请原谅Jerry这篇文章的题目有"标题党"的嫌疑. 没错,至少SAP成都研究院的部分团队如此,比如Jerry目前就职的SAP成都研究院数字创新空间. 之前Jerry的文章, 曾经提 ...

  6. lvs 中的DR模式 ,解释

    CIP即为客户端的IP地址 . DIR为调度器 . VIP为虚拟IP地址 . RIP为真实服务器IP地址 . 假设CIP的mac为A1,ip为B1:DIR只有一个物理网卡mac为A2,IP为B2:RI ...

  7. Const *ptr ptr

    1. const int *ptr = NULL; <=> int const *ptr = NULL; 1) 表示指向符号常量的指针变量,指针变量本身并非const所以可以指向其他变量. ...

  8. markdown在typora的超方便的应用

    经常性需要进行文字的编写,但是使用word比较麻烦,而excel又不方便自己的工作实际实用,特此有一款软件支持我的应用,typora软件,让人使用的无法自拨. typora是基于markdown的来应 ...

  9. python-----批量操作xml文件(新建、增、删、改、查)

    最近需要处理xml文件,学习并整理了一些常用的操作,代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/7/9 15: ...

  10. idou老师教你学Istio 27:解读Mixer Report流程

    1.概述 Mixer是Istio的核心组件,提供了遥测数据收集的功能,能够实时采集服务的请求状态等信息,以达到监控服务状态目的. 1.1 核心功能 •前置检查(Check):某服务接收并响应外部请求前 ...