OC语法7——内存管理之@property参数

@property的参数:

  我们已经知道为了给开发者提供便捷,OC提供了@porperty关键字,它可以自动生成属性的set和get方法。

  但是我们又知道,在OC中还面临者对象内存管理的问题,而且我们遵循“谁创建,谁释放”的原则管理内存。

  所以我们得重写set方法:把原先的成员变量(对象)release掉,然后给新成员变量retain。

  还得重写realloc方法:在realloc中调用release,释放该对象。

  呵呵。我们引入@property的目的就是为了让其自动生成set和get方法的,现在又得我们重写set方法,所以我们必须有新的解决方案。

  其实OC引入@property的关键字是允许添加参数的。总共有3个类型的参数。当我们不写参数时它默认是:

@property (atomic,readwrite,assign) Book *book;

atomic的意思是:多线程下安全;

readwrite:既可读取值,又可赋值(生成set和get方法);

assign: 不进行内存管理,直接给属性赋值。

@property的参数总共有3种类型,下表是全部的参数解释:

在没有多线程的问题时,我们选nonatomic参数,它运行速度比较快。

因为我们要进行内存管理,所以得写retain参数。它先会对原先的对象release,再给新对象retain。这样,便可以取代手动重写set方法这种体力劳动了!

@property (nonatomic,retain) Book *book;

assign,retain,copy三个参数的功能:

时间: 2024-10-12 20:26:52

OC语法7——内存管理之@property参数的相关文章

黑马程序员--Objective-C之--OC中的内存管理

对于面向对象的变成语言,程序需要不断地创建对象. 初始,创建的所有程序通常都有指针指向它,程序可能需要访问这些对象的实例变量或调用这些对象的方法,随着程序的不断执行,程序再次创建了一些新的对象, 而那些老的对象已经不会再被调用,也不再有指针指向他们,如果程序没有回收他们占用的内存,就会出现内存泄露. 如果程序一直泄露内存,那么可用内存就会越来越少,直到没有足够的内存,程序將会崩溃.目前,主要有两种管理内存的技术,一是引用计数,二是垃圾回收. iOS平台目前只支持引用计数,Mac平台支持垃圾回收.

iOS学习笔记之内存管理及@property

iOS5之后苹果公司引入了ARC机制,大大方便了ios开发者对内存的管理机制.在iphone 4出世的时候为什么ios在512M的内存中可以运行很大的游戏,保持畅快流畅的状态.得益于ios非常好的内存处理机制. 在我们现在创建项目的时候,默认会直接引入ARC机制,我们可以关闭ARC机制:在输入框中输入long点击搜索按钮,如图: 接下来即可进行老版本的内存操作了. 在老版本中,内存操作采用了引用计数(retainCount)alloc retain(+1)release(-1) 内存管理原则(配

关于OC中得内存管理问题,alloc,retain,release,copy,dealloc

我们都知道,一个手机,它的内存是有限的,而每一个手机应用都是需要一定空间,当应用所占空间过大时,系统就会发出警告,怎样在有限的空间中,做到更高效实用美观的效果呢? 这时候就牵涉到OC中得内存管理了. 在OC这门语言中,是不存在垃圾回收机制的,但是它采用了另外一种形式或者说方法,实现这一个空间回收的效果,那就是引用计数器. 别看-引用计数器,这个名字很高大上,实际是它就是一个整数. 所以OC中分配4个字节才存储它. 引用计数的值只有两种:0和非0,我们知道,计算机其实是很笨的,结果只有这两种时,它

黑马程序员-oc对象的内存管理

oc没有java的垃圾回收机制,所以对象的内存释放很重要,基本数据类型,我们不用理会,编译器会处理: oc的每个对象内部都由一个计数器,用来记录当前有几个指针在指向该对象:当计数器为0时该对象会从内存中释放: 相关方法和概念: 1:retain:对象方法,调用该对象方法,计数器+1,有返回值,返回对象本身: 2:release:没有返回值,计数器-1: 3:retainCount:获取当前计数器的值: 4:dealloc:当对象被回收时,就会调用该方法,覆盖该方法时一定要调用[super dea

IOS阶段学习第20天笔记(OC中的内存管理)

IOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效      OC中采用引用计数器对内存做管理,他是一个整数数据,表示对象引用的次数,每个对象分配4字节      的内存空间存放引用计数器.当一个对象的引用计数器为0时 它将被自动释放,反过来说 当使用alloc.      new .copy(mutableCopy)创建新对象时,引用计数器默认为1 2)黄金法则 当使

OC-@property内存管理中的参数

//1.生产get与set方法的声明 //2.生成get与set方法的简单实现 /*       - (void)setCar:(Car *)car{ _car = car; } - (Car *)car{ return _car; } */ //3.若果你没有声成名相对象的成员变量,那么他会自动生成一个_开头的成员变量 //@property 参数分为4类 /* 1.与set方法内存管理相关参数 retain: 要生成符合内存管理原则的set方法(应用与对象类型),(只在setter中rele

七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 [email protected]参数 [email protected]和循环retain的使用 6.NSString的内存管理

1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程序闪退. 2.OC内存管理的范围 : 管理任何继承NSObject的对象,对其他的基本数据类型无效. 3.对象类型是程序运行过程中动态分配的,存储在堆区:内存管理主要是对 堆区中的对象的内存管理. 4.OC内存管理的原理 为了防止内存泄露 对象的引用计数器 : 每个OC对象都有自己的引用计数器,是一

oc-set方法内存管理 和 @property的参数

想一个对象中 连续两次set某个对象,会造成先set的对象 没有release,造成内存没有释放. 1 /* 2 内存管理代码规范: 3 1.只要调用了alloc,必须有release(autorelease) 4 对象不是通过alloc产生的,就不需要release 5 6 2.set方法的代码规范 7 1> 基本数据类型:直接复制 8 - (void)setAge:(int)age 9 { 10 _age = age; 11 } 12 13 2> OC对象类型 14 - (void)set

OC - 浅谈内存管理

今天看到一篇不错的文章关于OC内存管理的,转载一下与你共享 概述我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没有得到及时释放那么就会占用大量内存.其他高级语言如C#.Java都是通过垃圾回收来(GC)解决这个问题的,但在OjbC中并没有类似的垃圾回收机制,因此它的内存管理就需要由开发人员手动维护.今天将着重介绍ObjC内存管理: 1 引用计数器 2