管理范围:

管理任何继承NSObject的对象,对其他的基本数据类型无 效

本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于 栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指 向对象的指针也被回收,此时对象已经没有指针指向,但依然存在于内存中,造成内存泄 露。

内存管理的原则

1)原则 

只要还有人在使用某个对象,那么这个对象就不会被回收; 只要你想使用这个对象,那么就应该让这个对象的引用计数器+1; 当你不想使用这个对象时,应该让对象的引用计数器-1;

2)谁创建,release 

(1)如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者 autorelease方法
(2)不是你创建的就不用你去负责

3)retain,release 

只要你调用了retain,无论这个对象时如何生成的,你都要调用release

4)总结 

有始有终,有加就应该有减。曾经让某个对象计数器加1,就应该让其在最后-1.

:

1)空指针:没有指向任何东西的指针,给空指针发送消息不会报错 关于nil和Nil及NULL的区别:

nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) nil 是一个对象值。
Nil: A null pointer to an Objective-C class.

NULL: A null pointer to anything else. ( #define NULL ((void *)0) ) NULL是一个通用指针(泛型指针)。

NSNull: A class defines a singleton object used to represent null values in collection objects (which don't allow nil values).

[NSNull null]: The singleton instance of NSNull.

[NSNull null]是一个对象,他用在不能使用nil的场合。

@property

@property int age; 1)生成一个_age 2)生成get和set方法的声明 3)生成 get和set方法的实现

@property (......) int age;

1)内存管理相关参数 

retain:对对象release旧值,retain新值(适用于OC对象类型) assign:直接赋值(默认,适用于非oc对象类型) copy:release旧值,copy新值

验证assign如果作用在对象上,实际上就是直接赋值 //使用@property增强型 生成get和set方法

@property(nonatomic,assign)Car *car; /*

.m文件中实际上生成的是
_car = car; //当对象release后,将无法使用该对象

*/

@property 参数(二)

1)是否要生成set方法(若为只读属性,则不生成

readonly:只读,只会生成getter的声明和实现 readwrite:默认的,同时生成setter和getter的声明和实现

2)多线程管理(苹果在一定程度上屏蔽了多线程操作

nonatomic:高性能,一般使用这个 atomic:低性能,默认

3)setget方法的名称 

修改set和get方法的名称,主要用于布尔类型。因为返回布尔类型的方法名一般以is开头,修改名称一般用 在布尔类型中的getter。

@property(nonatomic,assign, setter=abc:,getter=haha)int age 可以理解为把[psetAge:]------>[pabc:], [page] --------->[phaha];

@property(nonatomic,assign, setter=setVip:,getter=isVip) BOOL vip;

转载于:https://www.cnblogs.com/ljcgood66/p/5295772.html

内存管理范围和@property相关推荐

  1. 《Objective-c》-(内存管理之三:@property的内存管理)

    内存管理之三--<@property的内存管理> 1.@property中与setter内存管理相关的参数 retain : release旧值,retain新值(适用于OC对象类型): ...

  2. IOS第四节:OC中的内存管理机制

    [自动释放池] [autorelease方法和自动释放池] 每一个对象都有一个autorelease方法,调用autorelease方法之后不会像调用release方法一样马上释放对象, 当一个对象调 ...

  3. BEP 7:CUDA外部内存管理插件(下)

    BEP 7:CUDA外部内存管理插件(下) Numba依赖 向库中添加EMM插件的实现自然会使Numba成为库的依赖项,而以前可能没有.为了使依赖关系可选,如果需要的话,可以有条件地实例化并注册EMM ...

  4. BEP 7:CUDA外部内存管理插件(上)

    BEP 7:CUDA外部内存管理插件(上) 背景和目标 在CUDA阵列接口使得能够共享不同的Python之间的数据库的访问CUDA设备.但是,每个库都与其它库区别对待.例如: • Numba在内部管理 ...

  5. Objective-C内存管理知识总结

    原帖地址  http://www.cocoachina.com/bbs/read.php?tid-12760.html Objective-C的内存管理机制是比较灵活的,即可以拿来像C/C++一样用, ...

  6. oc45--多对象内存管理 优化

    // // main.m // Set方法的内存管理#import <Foundation/Foundation.h> #import "Person.h" #impo ...

  7. 使用QT进行内存管理

    使用QT进行内存管理 Memory Management with Qt 使用QT进行内存管理 Garbage Collection through the Back Door 通过后门垃圾回收 Hi ...

  8. 属性与内存管理(属性与内存管理都是相互关联的)

    <span style="font-size:18px;"> 属性与内存管理(属性与内存管理都是相互关联的)第一部分一,属性:属性是OC2.0之后出来的新语法,用来取代 ...

  9. Objective-C 内存管理retain和release

    OC使用引用计数来管理内存,每个继承NSObject的对象,内部都维护了一个引用计数器retainCount.当对象创建时(调用alloc或者new)引用计数器会+1, 手动调用retain()方法能 ...

最新文章

  1. 送你一份不正经的深度学习简述(附论文)
  2. vue展示信息卡片_vue实现登录和个人信息组件展示
  3. sql server 2008学习2 文件和文件组
  4. jvm默认的初始化参数_您是否应该信任JVM中的默认设置?
  5. Android Sdk 国内镜像下载地址
  6. Node.js 应用故障排查手册 —— 雪崩型内存泄漏问题
  7. fi sap 凭证冲销 稅_SAP 成本收集器与重复制造配置手册
  8. 基于微信我们可以做什么样的应用?
  9. mongodb mysql json数据类型_mongodb 数据格式补充
  10. php二维数组按照键值排序的方法
  11. 智能控制在计算机领域的应用,智能控制的主要应用领域
  12. 湛江景点旅游攻略!究竟有哪些你不容错过的景点?
  13. Java针对不同文件加水印
  14. ubuntu上安装微信教程
  15. python提取pdf发票信息_python读取pdf(发票)
  16. 手把手教你实现HBase免切片渲染空间大数据
  17. stm32f103c8t6控制ESP8266与手机APP通信
  18. P3387 【模板】缩点 洛谷 java题解 连通图+拓扑排序
  19. vue接入下载文件接口
  20. 足球比分动态 API数据接口

热门文章

  1. mysql更新数据索引慢_mysql添加索引,查询反而变慢
  2. 爆发前的最后按钮 白鹭推HTML5首款生态产品Egret Runtime
  3. 一个服务器9个角色的体验,谁体验过?剑网三缘起服务器合并
  4. Oracle ASM 进程之ASMB
  5. 阻塞队列之LinkedBlockingQueue
  6. WPF 使用MahApps.Metro UI库
  7. codevs 爱改名的小融
  8. ExtJS4为form表单必填项添加红色*标识
  9. 使用 XML 实现按钮改变焦点设置背景图
  10. LTE TDD的特殊子帧