黑马程序员----内存管理之三——《@property的内存管理》

内存管理之三——《@property的内存管理》

1.@property中与setter内存管理相关的参数

  • retain : release旧值,retain新值(适用于OC对象类型);

  • assign : 直接赋值,(默认,适用于非OC对象类型);

  • copy  : release旧值,copy新值;

2.@property中是否生成setter的参数

  • readonly  : 只会生成getter的声明和实现;

  • readwrite : 同时生成setter和getter的声明和实现;

3.@property中与多线程相关的参数

  • nonatomic : 性能高(一般用这个);

  • atomic  : 性能低(默认);

4.@property中设置setter和getter名称的使用

  • setter : 设置setter方法的名称,一定要有一个冒号;

  • getter : 设置getter方法的名称(一般用在BOOL类型中,BOOL类型的getter的方法名,一般都是以is开头)

5.循环retain和@class

  • @class的作用:仅仅告诉编译器某个名称是一个类:比如:@class Person;仅仅是告诉编译器Person是一个类(内部细节并不知道);

  • 开发中引用一个类的规范:

1.在.h文件中用@class来声明类(不能用#import,否则会出现循环引用的问题);

2.在.m文件中用#import来包含类的所有东西;

  • 两端循环引用的解决对策:

1.一端用retain参数(@property中);

2.一端用assign参数(@property中);注意:用了assign,即调用set方法就不会做retain,就不用在dealloc方法中对此对象做release。

时间: 2024-10-24 13:05:29

黑马程序员----内存管理之三——《@property的内存管理》的相关文章

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

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

黑马程序员---ios开发之,property指针在ios5中的一些说明

在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了,在此我也不介绍,网上有很多相关文章. 现在我们看看iOS5中新的关键字strong, weak, unsafe_unretained. 可以与以前的关键字对应学习strong与retain类似,weak与unsafe_unretained功能差不多(有点区别,等下会介绍,这两个新 关键字与assign类似).在iOS5中用这些新的关键字,就可以不用手动管理内存了,从java等其它语言转过来的程序

黑马程序员——C语言基础---进制内存分析与类型说明符

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一. 进制 1. 什么是进制 l 是一种计数的方式,数值的表示形式 汉字:十一   十进制:11  二进制:1011  八进制:13 l 多种进制:十进制.二进制.八进制.十六进制.也就是说,同一个整数,我们至少有4种表示方式 2. 二进制 1> 特点:只有0和1,逢2进1 2> 书写格式:0b或者0b开头 3> 使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储 4>

黑马程序员 oc对象的行为和内存分析,匿名对象

#import <Foundation/Foundation.h> @interface Car : NSObject { @public int speed; int wheels; } // oc方法必须是-开头 // oc方法中所有的数据类型必须得用括号括起来 // oc方法中的()就是用来扩住数据类型的 -(void)run; @end @implementation Car - (void)run { NSLog(@"%d个轮子和速度为%d的车子跑起来了!");

黑马程序员_spring2.5视频教程--视频列表

\黑马程序员_spring2.5视频教程\01Struts相关基础理论介绍.mp4; \黑马程序员_spring2.5视频教程\02搭建struts开发环境.mp4; \黑马程序员_spring2.5视频教程\03用struts开发简单的登陆示例程序.mp4; \黑马程序员_spring2.5视频教程\10.使用构造器装配属性.mp4; \黑马程序员_spring2.5视频教程\11Resource注解完成属性装配.mp4; \黑马程序员_spring2.5视频教程\12编码剖析@Resourc

黑马程序员-OC内存管理 @property的增强

涉及到内存管理,只读,多线程等很多功能时,setter和getter方法也就没那么简单了:当然@property依然强大,很好用: 1:内存管理相关参数: *:retain:  (如果是oc对象类型),生成的setter会自动release旧值,retain新值: *:assign:(适用于非oc对象)  这个是默认的值 *:copy:release旧值,copy新值: @property (retain) NSString *name; // 同类型的参数不能同时写 // @property

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

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

黑马程序员_Objective C中的@property 与 @synthesize 快速生成setter getter方法

<a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>.<a href="http://www.itheima.com"target="blank">.Net培训</a>.期待与您交流! 一般来说在一个类中 成员变量是会有setter 跟getter方法的. 如果每一个成员变量的setter 跟gett

黑马程序员_OC学习笔记之@property和@synthesize

[objc] view plaincopyprint? <span style="font-size:24px;">#import <Foundation/Foundation.h> @interface Person : NSObject { int _age; int age; int _height; int height; int _weight; int weight; int _money; int money; } @property int ag

黑马程序员——hashCode方法的作用,java内存泄露

hashCode方法的作用:当有一个对象要存入hash集合的时候,JVM首先会调用hashCode方法获取该对象的哈希值,然后根据哈希值找到相应的存储区域,最后取出该区域的所有元素与该对象进行equals比较,如果相等,不存入该元素,否则,存入.这样不用遍历集合中的所有元素就能的到我们想要的结果,提高了查找的效率.但是如果不覆写hashCode方法的话,相同的对象可能会存储在HashSet集合中,虽然他们equals比较相同,但他们的内存区域不同的话,就不会进行equals比较了.为了让两个相同