第四天:内存管理-property参数
来源:互联网 发布:mac airplay显示器关闭 编辑:程序博客网 时间:2024/06/07 03:39
1.通常引用一个类有两种方法:
1,通过#import方法引入
2.通过@class引入
#import 和@class的区别:
#import "B.h"@interface A:NSObject {B *b;}@end
1.#import方式会包含被引用类的所有信息,包括被引用类的变量和方法。@class方式只是告诉编译器在a.h文件中B *b只是类的声明,具体这个类里有什么信息,这是不需要知道,等实现文件中真正用到的是否,才会去查看B类中信息。
2.使用@class方式由于只需要知道被引用类(B类)的名称就可以了,而在现实类由于要用到被引用类中的实现变量和方法,所以在.m文件中需要使用#import来包含被引用类的头文件。
3.如果有些文件一次被#import,那么一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要从新编译一遍,这样的效率也是可想而知的。而相对来讲,使用@class凡是就不会出现这种问题。
4.内存管理_property 参数:
(当一个类中的成员变量中有很多的OC对象的是否,这时候对于对象之间的管理内存问题会很麻烦,特别是在setter方法里面,这时候,编译器就引入了property的retain参数,来进行管理内存。
1.retain:如果property里面有retain参数,那么编译器在setter方法里面,编译器会自动加上,先release旧值,然后再retain新的值。 所以,如果你在一个类中定义的是基本数据类型如:@propertyint age 。这时候不需要任何操作,其中已经包含assign操作(直接赋值),但是如果类中定义的是一个OC对象,那么你需要用retain如:@property (retain ) Student *stu;
Assign:默认类型,setter方法直接赋值,不进行retain操作。
Readonly :只生成getter的方法
Readwirte :setter和getter的方法都生成
copy:setter方法release旧值,再copy新值。
atomic:默认属性:提供多线程安全。,代表给方法加锁,保证线程安全(耗性能)
nonatomic,代表方法不需要考虑线程安全问题。
注意:基本上所有的属性都是nonatomic类型,不需要考虑atomic,因为性能问题。
property里面还可以指定setter和getter方法的名字,例如:@property(setter = setAge,getter = getAge) int age; 这样就指定了setter和getter方法:
5.自动释放池:
是OC里面的一种内存自动回收机制,一般可以将一些临时变量放到自动释放池里面去,统一回收释放
当自动释放池销毁的时候,池里面的所有对象都会调用一次release方法:
OC对象只需要发送一条autorelease消息,就会把这个对象添加到最近的自动释放池中,(栈顶的释放池)
Autorelease实际上只是把对release的调用延迟了,对于每一次autorelease,系统只是把该对象放入了当前autoreleasepool中,当该pool被释放时,该pool中的所有对象会被调用release。
- 第四天:内存管理-property参数
- 内存管理:@property参数
- 内存管理3@Property参数
- 内存管理-@property参数详情
- 12-内存管理@property的参数
- @property与内存管理以及可传参数
- 黑马程序员---05@property参数相关的内存管理
- Objective-C内存管理(四)@property相关参数详解
- OC学习笔记五 内存管理(property 参数)
- OBJ-C内存管理+@property参数+@class+autorelease学习笔记
- Property 与 内存管理
- @property的内存管理
- IOS 学习第四天 内存管理
- OC @property的内存管理
- Objective-C中@property内存管理以及其各种参数介绍
- OC基础—内存管理之@property及其参数(补充新知识:循环引用和@class)
- OC基础-内存管理-@property以及它的参数
- objective-c---SEL、内存管理(引用计数器、野指针、@property参数、循环retain、autorelease)
- android Service显示Notification浅析
- hdu 1002 A + B Problem II(大正整数相加)
- Number of 1 Bits
- hdu5024
- HDU 1166 敌兵布阵 (线段树 单点增减, 区间求和)
- 第四天:内存管理-property参数
- java通过JDBC链接SQLServer2012
- Hibernate的一对多增改级联操作
- 算法的时间复杂度
- iOS_UIImage中 + imageNamed: 和 + imageWithContentsOfFile:两个方法的区别
- poj 3264 -Balanced Lineup (RMQ与线段树两种做法)
- android调用httpclient.excute报android.os.NetworkOnMainThreadException 异常处理
- 简单八叉树源码剖析
- 排序算法整理