iOS面试基础知识点(一) 内存相关

什么是ARC?

ARC即Automatic Reference Counting,它是现有的Objective-C的内存管理机制。该机制下,代码中会自动添加retain/release,原本需要手动处理引用计数的代码交由编译器自动完成。

什么是MRC?

MRC即Manual Reference Counting,手动通过retain为对象获取内存,并用release释放内存。

ARC与Garbage Collection的区别?

Garbage Collection在运行时管理内存,可以解决retain cycle,而ARC在编译时管理内存。

循环引用?

循环引用是指两个或两个以上对象相互之间互相强引用,导致所有对象无法被释放的现象。是内存泄漏的一种情况。实际使用中,最为常见的是block的应用。

关键词,引用类型?

strong:表示指向并拥有该对象。其修饰的对象的引用计数会+1.该对象只要引用计数不为0,就不会被销毁。可以通过强行设为nil进行销毁。

weak:表示指向但不拥有该对象。其修饰的对象引用计数不会增加,会自行在内存中被销毁。使用较多的是定义一个代理。

assign:主要用于修饰基本数据类型,如int、float,这些值主要存在于栈中。

copy:与strong类似。不同的是strong的复制是多个指针指向同一个地址,而copy的复制会在内存中复制一份对象,指针是指向不同的地址。copy一般用在修饰有对应可变类型的不可变对象上,类似NSString

weak一般用于修饰对象,assign一般用来修饰基础数据类型。原因就是assign修饰的对象被释放后,指针的地址依然存在,造成“野指针”,在堆上容易造成奔溃。而栈上的内存系统会自动释放,不会造成“野指针”。

在Objective-C中,基本数据类型默认的关键字是atomic,readwrite和assign;普通属性的默认关键字是atomic,readwrite和strong。

atomatic和nonatomic的比较?

atomatic修饰的对象能保证setter和getter的完整性,任何线程访问它都可以得到一个完整的初始化的对象。但因为要保证操作的完成,所以速度较慢。比nonatomic安全,但也不是绝对的线程安全。

nonatomic修饰的对象不保证setter、getter的完整性,所以,当多个线程访问它的时候,他可能会返回一个未初始化的对象。所以,相较atomatic而言,速度更快,线程也是不安全的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,871评论 1 32
  • Cocoa内存管理机制 (1)当你使用new、alloc、copy方法创建一个对象时,该对象的保留计数器值为1.当...
    John_LS阅读 7,756评论 0 6
  • 内存管理的基本范围和概念. 程序运行过程中药创建大量的对象, 和其他高级语言类似,在ObjC中对象存储在堆区,程序...
    ValienZh阅读 4,394评论 0 2
  • ①饭团 水蜜桃 青提 番茄 看视频看到有人吃饭团,想到家里还剩了几片之前买的海苔片,整起来整起来! 虽然这个米饭被...
    爱吃红薯的老鼠阅读 1,819评论 0 1
  • 你杀了人,你有罪 存在主义? 社会现象? 司法公正? 十八的我不想从这些角度去挖掘。 wh...
    Liquricee阅读 3,157评论 0 2

友情链接更多精彩内容