iOS——引用计数(一)

这篇具有很好参考价值的文章主要介绍了iOS——引用计数(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自动引用计数

自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术。
满足以下要求后,我们的代码就无需再次键入retain或者是release代码了:

  1. 使用Xcode 4.2或以上版本
  2. 使用LLVM编译器3.0或以上版本
  3. 编译器选项中设置ARC为有效
    在以上条件下编译源代码时,编译器将自动进行内存管理。

手动内存管理/引用计数

对OC中对象所做的动作:1、生成对象;2、持有对象;3、释放对象;4、废弃对象
iOS——引用计数(一),ios,objective-c

内存管理的思考方式

  • 自己生成的对象,自己所持有
  • 非自己生成的对象,自己也能持有
  • 不再需要自己持有的对象时释放
  • 非自己持有的对象无法释放
    除了上面提到的“生成”、“持有”、“释放”,在OC的内存管理中还要加上”废弃“一词。
    以上的操作对应的OC方法:
    这些有关OC内存管理的方法,实际上不包含在OC该语言中,而是包含在Cocoa框架中用于OS X、iOS应用开发。Cocoa框架中Founfation框架类库的NSObject类负担内存管理的职责。OC内存管理中的alloc/retain/relesase/dealloc方法分别指代NSObject类的alloc类方法、retain实例方法、release实例方法和delloc实例方法。
    iOS——引用计数(一),ios,objective-c

自己生成的对象,自己所持有

使用以下名称开头的方法意味着自己生成的对象只有自己持有:

  • alloc
  • new
  • copy
  • mutableCopy

非自己生成的对象,自己也能持有

除了用上面名称开头的方法,用其他的方法创建的对象都是非自己生成的对象,但是自己也能持有。例如:

id obj = [NSMutableArray array];

在该代码中,NSMutableArray类对象被赋值给变量obj,但是变量obj并不自己持有该对象。使用retain方法可以使非自己生成的对象成为自己所持有的。

[obj retain];

不再需要自己持有的对象时释放

自己持有的对象不再需要时,持有者有义务释放该对象:释放使用release方法

[obj release];
//释放对象
- (id)allocObject {
  id obj = [[NSObject alloc] init];
  return obj;
}
//取得非自己生成但是自己持有的对象
id obj1 = [obj0 allocObject];
对象一经释放绝对不可访问

非自己持有的的对象,若用retain方法变为自己持有,也同样可以使用release方法释放。被自己持有的对象一旦不再需要,务必要释放。

  • autorelease方法:该方法可以使取得的对象存在,但是自己不持有:
- (id) object {
  id obj = [[NSObject alloc] init];
  [obj autorelease];
  return obj;
}
  • autorelease方法提供这样的功能,使对象在超出指定的生存范围时能够自动并正确的释放
    当然,也可以通过retain方法将调用autorelease方法取得的对象变为自己持有
    iOS——引用计数(一),ios,objective-c

无法释放非自己持有的对象

访问已经被废弃的对象,或者释放“取得的对象存在,但是自己不持有对象”的时候,会发生崩溃文章来源地址https://www.toymoban.com/news/detail-731972.html

到了这里,关于iOS——引用计数(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LabVIEW FPGA入门】使用数字IO卡实现计数器输入功能

            1.首先需要用一个数字IO的输入FPGA端口,并将其拖入程序框图中,同时创建一个循环。                  2.如果想要在循环中实现累加功能,就可以使用移位寄存器。         数字输入的当前值和历史值进行比较,用于一个判断大于,来确定是否出现了上升沿

    2024年01月20日
    浏览(40)
  • 报错building for iOS Simulator, but linking in object file built for iOS

    Coderliszt 2021.04.24 22:33:37字数 277阅读 1,158 article class=\\\"_2rhmJa\\\" 这个M1芯片下Xcode 编译错误的解决方案: Xcode版本:12.3 M1芯片的Macbook pro 在选中模拟器进行编译的时候,会报如下类似错误。 building for iOS Simulator, but linking in object file built for iOS, file \\\'xxx/Pods/WechatOpenSDK/WeChatSDK1.8.5/lib

    2023年04月08日
    浏览(27)
  • 【Effective Objective - C】—— 熟悉Objective-C

    Objective-C通过一套全新语法,在C语言基础上添加了面向对象特性。Objective-C的语法中频繁使用方括号,而且不吝于写出极长的方法名,这通常令许多人觉得此语言较为冗长。其实这样写出来的代码十分易读,只是C++或Java程序员不太能适应。 Objective-C语言学起来很快,但有很

    2024年01月16日
    浏览(36)
  • objective-c 基础学习

    目录 第一节:OC 介绍 ​​第二节:Fundation 框架 ​第三节:NSLog 相对于print 的增强 ​第四节:NSString ​第五节:oc新增数据类型 第六节: 类和对象 ​类的方法的声明与实现 ​第七节:类和对象的存储 第八节:nil 与 NULL 第九节:分组导航标记#pragma mark ​第十节:方法与函

    2024年02月07日
    浏览(28)
  • 第一章 熟悉Objective-C

    Objective—C语言是由Smalltalk演化而来,后者是消息型语言的鼻祖,所以该语言使用的“消息结构”而非“函数调用”。 1. 消息和函数调用之间的区别 关键区别在于: 使用消息结构的语言,其运行所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。

    2024年01月18日
    浏览(30)
  • Effective Objective-C 学习(二)

    “属性”(property)是 Objective-C 的一项特性,用于封装对象中的数据。Objective-C 对象通常会把其所需的数据保存为各种实例变量。实例变量一般通过“存取方法”来访问。其中,“获取方法”(getter)用于读取变量值,而“设置方法”(setter)用于写入变量值。开发者可以令

    2024年02月20日
    浏览(33)
  • Objective-C日期NSDate使用

    2024年01月21日
    浏览(38)
  • Effective Objective-C 学习(三)

    Objective-C 使用引用计数来管理内存:每个对象都有个可以递增或递减的计数器。如果想使某个对象继续存活,那就递增其引用计数:用完了之后,就递减其计数。计数变为 0时,就可以把它销毁。 在ARC中,所有与引用计数有关的方法都无法编译(由于 ARC 会在编译时自动插入

    2024年02月22日
    浏览(36)
  • Effective Objective-C 学习(四)

    在执行后台任务时,GCD 并不一定是最佳方式。还有一种技术叫做 NSOperationQueue,它虽然与 GCD 不同,但是却与之相关,开发者可以把操作以 NSOperation 子类的形式放在队列中,而这些操作也能够并发执行。 GCD是纯C的API,而NSOperationQueue是Objective-C的对象。这意味着使用GCD时,任

    2024年02月19日
    浏览(30)
  • use gnustep objective-c

    专注于概念,而不是迷失在语言技术细节中 编程语言的目的是成为一个更好的程序员; 也就是说,在设计和实现新系统以及维护旧系统方面变得更加有效 header preprocess interface implementation method variable declare and expression comment basic integer set and float set enum type void type derive type incl

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包