欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Objective-C,

来源: 开发者 投稿于  被查看 3666 次 评论:34

Objective-C,


1、前言
2、熟悉Objective-C
3、头文件的引入
4、字面量语法
5、多用类型常量而不是预处理指令#define
6、巧用枚举表示状态、选项、状态码
多菜.jpeg

1、前言

这本书是朋友推荐的,买了好久了,开始买的初衷就是边学英语边巩固自己的基础,去年背了一年的单词效果甚微,就想着啃一下原版书籍,谁知道自己巨菜,大量的单词需要查询,而且由于计算机专业词汇的原因,我还要挑选不认识单词合适的意思,然后翻译完自己再一句话理解一下,过程很慢很慢,去年十一点下班回家啃一个小时看一页,后来工作太累没坚持下来,今年个人身体原因换了家公司,轻松了点,就像继续啃下去,而且想花点时间总结一下,希望有兴趣的朋友可以一块交流一下。

2、熟悉Objective-C

①、动态绑定

首先Objective-C是在C的基础上添加了面向对象特征,而最大的特性就是消息机制,在运行时的时候决定哪些代码被执行,而不是在编译期就编译好虚拟的表来执行指定的代码,而且编译器也不用考虑所接受消息的类型,接收消息对象的问题也在运行时处理。这个过程就叫做动态绑定

②、运行时组件

Objective-C重要工作都由运行时组件来完成,运行时组件本质上是一种和开发者所编写代码连接的动态库,所以我们只需要更换运行时组件就能获得性能的提升,而不是像在编译期做大量工作的语言,就需要重新编译应用程序代码。

③、Objective-C内存管理

上面我们说了OC是C演变过来的,所以C的一些特性在OC上同样适用,而在OC上使用了引用计数来来管理内存,我们要知道OC中的指针是用来指向对象的,而且要知道对应的指针都是在栈内存上,对象在堆内存上,当我们申请一个对象,然后再申请一个变量指向同一地址,那么不会拷贝该对象,只是两个指针同时指向这个对象。

NSString *str1 = @“abc”;
NSString *str2 = str1;

上边的例子是栈上的两个指针指向堆上的一个@“abc”对象。这就让我们更清楚的理解了深浅拷贝的问题
还有需要我们注意的问题是分配在堆上的内存必须直接管理,分配在栈上的内存会在栈pop出来的时候自动的清理掉,而Objective-C把堆内存的内存管理抽象出来你不需要 在用malloc和free来分配和释放对象的内存Objective-C的运行时通过引用计数的架构抽象这种内存管理。

注意:但是在Objective-C中我们可能会遇到一个变量没有带 * 而在存储在栈空间上,这些变量不会持有Objective-C对象,很常见的例子就是CGRect,这是CoreGraphics框架的。

CGRect是一个C语言的结构体,定义如下:

struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;

这种类型的结构体贯穿整个系统框架,这些地方如果换成Objective-C的对象会增加内存开销,

相关文章

    暂无相关文章

用户评论