• IB:IB是指Interface Builder,如IBAction,IBOutlet。
  • IBOutlet和IBAction是什么?
  • IBOutlet:中文翻译应该是:插座,连接点(书上写的是出口)。
  • autorelease相当于Qt中的deleteLater。
  • 所有的NSObject子类对象都有引用计数。
    NSObject指针或者引用计数对象(如NSString,在Qt中叫隐式数据共享)相当于C++中的shared_ptr,以及Qt中的QSharedPointer。
  • iOS中copy,strong,retain,weak和assign的区别

赋值分为:基本类型赋值,对象指针赋值,对象赋值。

基本类型赋值是值拷贝,内存在栈上。
对象涉及到引用传递问题。

为什么对象要使用引用?因为基本类型的值拷贝速度快,可以直接进行值拷贝。但是对象是数据和方法的集合,出于性能考虑,不能用值拷贝,要用对象引用。对象在堆上创建,在栈上被引用。

引用传递存在的问题是如何保证堆内存合理释放:既要防止出现空指针导致程序崩溃,也要防止内存泄漏影响系统。

所以指针赋值时,为了防止出现空指针,需要进行引用传递,防止一个指针释放了内存,导致其他指针成为“悬挂指针”;为了防止内存泄漏,需要在赋值前先释放被赋值指针指向对象的引用,再进行赋值。最后,如果要获取对新对象的引用,此指针就相当于强指针,如果不获取对新对象的引用,此指针就相当于弱指针。

赋值主要影响setter函数的生成内容。下面分别说明。

assign:基本数据类型的值拷贝,不涉及引用问题。
copy:参考 https://blog.csdn.net/miaogehehe/article/details/80591805,
weak:相当于C++中的弱指针,被赋值时,不增加等号右边对象的引用计数,不负责释放内存。当其指向的对象被释放后,此指针自动置为NULL,不会出现野指针。
strong:相当于C++中的强指针。被赋值时,增加等号右边对象的引用计数,参与负责释放内存。当其指向的对象被释放后,此指针自动置为NULL,不会出现野指针。
retain:参考 https://www.cnblogs.com/jw-blog/p/5526655.html

  • objective c只能在堆上创建对象,在栈上使用指针引用。参考:https://blog.csdn.net/Philm_iOS/article/details/81200510。

写一百个字不如一张图,OC中数据或对象在内存中的分布图如下:
请添加图片描述

把内存分布弄清楚以后,理解内存管理也不是难事。

  • first responder:中文翻译为第一响应者,实际上就是windows中的当前焦点所在的控件。