分类:

Objective-C

autorelease池 上一节中我们了解到autorelease的种种神奇之处:它能够在合适的时候自动释放分配的内存。但是如何才能让便以其之道什么时候合适呢?这种情况下,垃圾收集器是最好的选择。下面我们将着重讲解垃圾收集器的工作原理。不过,为了了解垃圾收集器,就不得不深入了解 autorelease 的机制。所以我们要从这里开始。

5 评论 4 次阅读

复制运算符 典型cloning,copy,copyWithZone:,NSCopyObject() 在 C++ 中,定义复制运算符和相关的操作是很重要的。在 Objective-C 中,运算法是不允许重定义的,所能做的就是要求提供一个正确的复制函数。 克隆操作在 Cocoa 中要求使用NSCopying协议实现。该协议要求一个实现函数: 这个函数的参数是一个内存区,用于指明需要复制那一块内存。Co ...

0 个评论 1 次阅读

默认构造函数:指定初始化函数 在 Objective-C 中,默认构造函数没有实在的意义,因为所有对象都是动态分配内存,也就是说,构造函数都是确定的。但是,一个常用的构造函数确实可以精简代码。事实上,一个正确的初始化过程通常类似于: 剪贴复制代码是一个不良习惯。好的做法是,将共同代码放到一个独立的函数中,通常称为“指定初始化函数”。通常这种指定初始化函数会包含很多参数,因为 Objective-C ...

0 个评论 3 次阅读

self = [super init...] 在上一篇提到的代码中,最不可思议的可能就是这句self = [super init...]。回想一下,self是每个方法的一个隐藏参数,指向当前对象。因此,这是一个局部变量。那么,为什么我们要改变一个局部变量的值呢?事实上,self必须要改变。我们将在下面解释为什么要这样做。

7 评论 1 次阅读

类的实例化位导致两个问题:构造函数、析构函数和赋值运算符如何实现,以及如何分配内存。 在 C++ 中,变量默认是“自动的”:除非被声明为static,否则变量仅在自己的定义块中有意义。动态分配的内存可以一直使用,直到调用了free()或者delete。C++ 中,所有对象都遵循这一规则。 然而在 Objective-C 中,所有对象都是动态分配的。其实这也是符合逻辑的,因为 C++ 更加 stat ...

0 个评论 2 次阅读

简单继承 Objective-C 也有继承的概念,但是不能多重继承。不过,它也有别的途径实现类似多重继承的机制,这个我们后面会讲到。 C++ Objective-C 在 C++ 中,一个类可以继承自一个或多个类,使用public、protected以及private修饰符。子类的函数如果要调用父类的版本,需要使用::运算符,例如Bar::,Wiz::等。 在 Objective-C 中,一个类只能 ...

0 个评论 0 次阅读

消息和消息传输 给nil发送消息 默认情况下,给nil发送消息也是合法的,只不过这个消息被忽略掉了。这种机制可以避免很多检查指针是否为空的情况。不过,有些编译器,比如 GCC,也允许你通过编译参数的设置关闭这一特性。 将消息代理给未知对象 代理 delegation 是 Cocoa 框架中 UI 元素的一个很常见的部分。代理可以将消息转发给一个未知的对象。通过代理,一个对象可以将一些任务交给另外的 ...

0 个评论 0 次阅读

成员函数的指针:选择器 在 Objective-C 中,方法具有包含了括号和标签的特殊语法。普通的函数不能使用这种语法。在 Objective-C 和 C 语言中,函数指针具有相同的概念,但是对于成员函数指针则有所不同。 在 C++ 中,尽管语法很怪异,但确实兼容 C 语言的:成员函数指针也是基于类型的。 C++ 在 Objective-C 中,引入了一个新的类型:指向成员函数的指针被称为选择器 ...

2 评论 2 次阅读

关于我

devbean

devbean

豆子,生于山东,定居南京。毕业于山东大学软件工程专业。软件工程师,主要关注于 Qt、Angular 等界面技术。

主题 Salodad 由 PenciDesign 提供 | 静态文件存储由又拍云存储提供 | 苏ICP备13027999号-2