文档章节

OC语言-ARC与分类

盘盘的灰灰
 盘盘的灰灰
发布于 2016/08/08 12:12
字数 993
阅读 6
收藏 0
  •  当自动释放池结束的时候.仅仅是对存储在自动释放池中的对象发送1条release消息 而不是销毁对象.

  • 如果在自动释放池中,调用同1个对象的autorelease方法多次.就会将对象存储多次到自动释放池之中.

             在自动释放池结束的时候.会为对象发送多条release消息.那么这个是就会出现僵尸对象错误.

             所以,1个自动释放池之中,只autorelease1次,只将这个对象放1次, 否则就会出现野指针错误.

  • 将对象存储到自动释放池,并不会使对象的引用计数器+1

     所以其好处就是:创建对象将对象存储在自动释放池,就不需要在写个release了.

  •  + (instancetype)person

             {

                return [[[self alloc] init] autorelease];

             }

     

             这样,我们直接调用类方法.就可以得到1个已经被autorelease过的对象.

     

  • 结构体变量分配在栈.OC对象分配在堆.

  • 强指针与弱指针.

        强指针: 默认情况下,我们声明1个指针 这个指针就是1个强指针. 

               我们也可以使用__strong来显示的声明这是1个强指针.     

               Person *p1; 这是1个强指针. 指针默认情况下都是1个强指针.

               __strong Person *p2; 这也是1个强指针.使用__strong来显示的声明强指针.

        弱指针: 使用__weak标识的指针就叫做弱指针.           

        无论是强指针还是弱指针,都是指针,都可以用来存储地址,这1点没有任何区别 。

        都可以通过这个指针访问对象的成员.

        唯一的区别就是在ARC模式下.他们用来作为回收对象的基准.     

        如果1个对象没有任何强类型的指针指向这个对象的时候,对象就会被立即自动释放

  • 演示第1个ARC案例

         int main(int argc, const char * argv[])

            {

                @autoreleasepool

                {

                    Person *p1 = [Person new];//p1是1个强指针.

                    //因为我们说过,每1个指针变量默认情况下都是1个强指针变量.

                    NSLog(@"------");

                }//当执行到这里的时候.p1指针被回收,那么Person对象就没有任何

                //强指针指向它了. 对象就在这被回收.

                return 0;

         }

     

     
  • ARC模式下的对象回收标准

         ARC机制下释放1个对象的标准是: 没有任何强指针指向对象的时候,对象就会被释放.

         如果这个时候有弱指针指向,也会被释放.

    什么情况下叫做对象没有强指针向指向.

         1).  指向对象的强指针被回收.

         2).  指向对象的强指针被赋值为nil

     
  •  在ARC的机制下,@property参数不能使用retain

         因为retain代表生成的setter方法是MRC的标准的内存管理代码.

         而我们在ARC的机制下 不需要这些代码.

         所以,在ARC机制下的setter方法 什么都不需要做.直接赋值就可以了.

     

  • 使用建议.

         1). 在ARC机制下.如果属性的类型是OC对象类型的.绝大多数场景下使用strong

         2). 在ARC机制下.如果属性的类型不是OC对象类型的.使用assign

         3).  strong和weak都是应用在属性的类型是OC对象的时候. 属性的类型不是OC对象的时候就使用assign.

     
  • 在ARC机制下,将MRC下的retain换位strong

         @property(nonatomic,strong)Car *car;

         做的事情:

         1).  生成私有属性.并且这个私有属性是strong

         2).  生成getter setter方法的声明

         3).  生成getter setter方法的声明

              setter的实现:直接赋值.

     
  • 在ARC机制下.当两个对象相互引用的时候.如果两边都使用strong 那么就会先内存泄露.

         解决方案: 1端使用strong 1端使用weak

     
  • MRC与ARC兼容: 使用命令.  -fno-objc-arc

 

© 著作权归作者所有

共有 人打赏支持
盘盘的灰灰
粉丝 0
博文 31
码字总数 24142
作品 0
深圳
私信 提问
OC对象,自动释放池,OC与C语言的区别

在C语言中,编程都是面向过程的编程,每一个代码块都严格按照从上至下的顺序执行,在代码块之间同样也是这样, 但是在OC中往往不是这样,OC和C++、java等语言一样,都是面向对象的编程语言,...

老人与海l
2018/08/22
0
0
OC-基础总结(二)

OC基础总结 重新回过头看这些基础知识,对许多知识点都有新的认识,拥有坚实的基础才能更快的成长。 OC内存管理 - 基础与MRC 内存管理概述 内存管理 内存的作用:存储数据。 1). 如何将数据存...

xx_cc
2017/05/01
0
0
Managing Toll-Free Bridging

在cocoa application的应用中,我们有时会使用Core Foundation(CF),我们经常会在Objective-C和CF之间进行转化。系统使用arc的状态下,编译器不能自动管理CF的内存,这时候你必须使用CFRet...

鉴客
2012/01/09
587
0
精品 CF与OBJC在ARC下的内存管理。

http://wangjun.easymorse.com/?p=1490 « ios本地通知和远程通知 创建一个Storyboard工程 » Managing Toll-Free Bridging 在cocoa application的应用中,我们有时会使用Core Foundation(C...

晨曦之光
2012/05/28
797
0
iOS引用转换:Foundation与Core Foundation对象互相转换(__CFNSString转NSString,void *转id等等)

1. 两个框架的基本知识 1.1 Foundation 框架名是,在Xcode新建工程时可以选择导入(其实会默认自动依赖好)。Foundation框架允许使用一些基本对象,如数字和字符串,以及一些对象集合,如数组,...

陈满iOS
2018/05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于eclipse2017 import javax.servlet.jsp.tagext引入错误得问题

在eclipse中: 这个javax.servlet.jsp.tagext属于是tomcat相关jar包找到jsp-api.jar 在tomcat文件夹下边的lib文件夹中就有 如果项目中报错的话 把这个加入到项目中 在myeclipse中: 如下图,...

ZhangLG
8分钟前
0
0
如何用RSS订阅?

本文由云+社区发表 摘要:我们常常会有订阅别人文章的需求,有更新的时候希望能有提醒的功能,RSS就是这样一个订阅的方式。很多网站上看到RSS的入口,点进去以后总是显示一堆的XML代码,我们...

腾讯云加社区
9分钟前
0
0
springcloud整体架构

架构 说明 针对这个架构图我分层介绍一下: 1、是web服务器的选型,这个我选择的是nginx+keepalived,haproxy也是一个选择,但是haproxy在反向代理处理跨域访问的时候问题很多。所以我们ngi...

张欢19933
11分钟前
0
0
Linux权限详解

Linux权限详解 命令之 chmod:修改权限 阅读目录(Content) 权限简介 一、快速入门 更改文件权限 (chmod命令) 一般使用格式 数字权限使用格式 更改文件拥有者(chown命令) 二、Linux权限详...

hblt-j
18分钟前
0
0
postgres预写式日志的内核实现详解-heap2类型

导读: postgres预写式日志的内核实现详解-概述 postgres预写式日志的内核实现详解-wal记录结构 postgres预写式日志的内核实现详解-wal记录写入 postgres预写式日志的内核实现详解-wal记录读...

movead
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部