Author

豆子

C++ 标准库是其强大的一个原因。即使它还有一些不足,但是已经能够算作是比较完备的了。这并不是语言的一部分,而是属于一种扩展,其他语言也有类似的部分。在 Objective-C 中,你不得不在 Cocoa 里面寻找容器、遍历器或者其他一些真正可以使用的算法。

0 个评论 1.8K 次阅读

字符串 Objective-C 中唯一的 static 对象 在 C 语言中,字符串就是字符数组,使用char *指针。处理这种数据非常困难,并且可能引起很多 bug。C++ 的string类是一种解脱。在 Objective-C 中,前面我们曾经介绍过,所有对象都不是自动的,都要在运行时分配内存。唯一不符合的就是 static 字符串。这导致可以使用 static 的 C 字符串作为NSStri ...

0 个评论 1.8K 次阅读

异常处理 比起 C++ 来,Objective-C 中的异常处理更像 Java,这主要是因为 Objective-C 有一个@finally关键字。Java 中也有一个类似的finally关键字,但 C++ 中则没有。finally 是 try()...catch() 块的一个可选附加块,其中的代码是必须执行的,不管有没有捕获到异常。这种设计可以很方便地写出简短干净的代码,比如资源释放等。除此之外 ...

4 评论 2.1K 次阅读

Getters Objective-C 中,所有对象都是动态分配的,使用指针引用。一般的,getter 仅仅返回指针的值,而不应该复制对象。getter 的名字一般和数据成员的名字相同(这一点不同于 Java,JavaBean 规范要求以 get 开头),这并不会引起任何问题。如果是布尔变量,则使用 is 开头(类似 JavaBean 规范),这样可以让程序更具可读性。

3 评论 2K 次阅读

Setters 如果不对 Objective-C 的内存管理机制有深刻的理解,是很难写出争取的 setter 的。假设一个类有一个名为 title 的NSString类型的属性,我们希望通过 setter 设置其值。这个例子虽然简单,但已经表现出 setter 所带来的主要问题:参数如何使用?不同于 C++,在 Objective-C 中,对象只能用指针引用,因此 setter 虽然只有一种原型, ...

3 评论 2K 次阅读

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

5 评论 2.2K 次阅读

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

0 个评论 1.7K 次阅读

QDialog::open() 考虑到前文所述的问题,我们对比一下应用程序级别模态的实现。当windowModality是Qt::NonModal的时候,只需调用QDialog::exec()就可以很容易实现。那么,为什么不提供一个类似的函数,只需简单的调用一下就可以实现一个窗口级别的模态对话框呢?答案就是QDialog::open()。QDialog::open()可以打开一个窗口级别模态对话框 ...

2 评论 2K 次阅读

QDialog 窗口级别模态

by 豆子

这篇文章内容主要来自 QtQuarterly30 里面的 New Ways of Using QDialog,介绍的是使用QDialog::open()(这个函数是Qt 4.5 引入的),而不是传统的exec()来实现一个窗口级别的模态对话框。所谓模态对话框,就是对话框会阻塞用户与父窗口的交互,直到对话框关闭,在 Mac OS X 中则称为 Sheet。这里牵扯到很多细节问题,值得我们注意。

4 评论 2.2K 次阅读

关于我

devbean

devbean

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

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