文档章节

OC语言-ARC与分类

盘盘的灰灰
 盘盘的灰灰
发布于 2016/08/08 12:12
字数 993
阅读 5
收藏 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基础总结 重新回过头看这些基础知识,对许多知识点都有新的认识,拥有坚实的基础才能更快的成长。 OC内存管理 - 基础与MRC 内存管理概述 内存管理 内存的作用:存储数据。 1). 如何将数据存...

xx_cc
2017/05/01
0
0
OC对象,自动释放池,OC与C语言的区别

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

老人与海l
08/22
0
0
Managing Toll-Free Bridging

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

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

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

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

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

陈满iOS
05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

macOs-挂载能读写的NTFS硬盘

转自:https://nicklinyi.gitee.io/blog/2018/04/macOS-ntfs.html Mac本身是支持NTFS写入的,只是NTFS是微软开发,由于版权和技术细节原因,苹果不愿公开说自己支持NTFS写入,也是有自己以后...

北风刮的不认真了
2分钟前
0
0
Namespace 命名空间

命名空间可以定义为一种封装方式。 为了解决开发中库和程序中可重用类和方法问题: 1.解决 PHP内部方法类/方法/常量 或者第三方 类/方法/常量之间的命名冲突 2.能够简化为了防止命名冲突而给...

忙碌的小蜜蜂
5分钟前
0
0
CDH的坑之Deploy Client Configuration Failed

Deploy Client Configuration Failed 1.问题描述 当使用CDH增添spark服务的时候,出现了以下错误: Faile to deploy client configuration to the cluster. 具体如下图: 2.思路 网上查了...

星汉
6分钟前
0
0
java guava 集合的操作:交集、差集、并集

Guava:google的工程师利用传说中的“20%时间”开发的集合库,它是对jdk提供的扩展,提供了很多实用的类来简化代码。 开源地址:https://github.com/google/guava jar包下载:http://maven....

帅的不像男的
6分钟前
0
0
从八个层面比较分析 Java 8, RxJava, Reactor

响应式编程在单机环境下是否鸡肋? 结论是:没有结论,我觉得只能抱着怀疑的眼光审视这个问题了。另外还聊到了 RSocket 这个最近在 SpringOne 大会上比较火爆的响应式”新“网络协议,githu...

小刀爱编程
9分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部