/ iOS

读书笔记《Effective Objective-C》第1条-起源

前言

偶然在豆瓣上看到这本书,书评还不错(抛开这翻译不看)。于是就买了这本书,看了下目录觉得挺有价值。所以准备好好地啃一下这本书~

这本书的内容覆盖了方方面面,每次看完都希望能把上面的东西好好整理一下帮助自己有更深地理解,所以就有了写这个读书笔记的想法。

头一次写读书笔记,我会把我所理解的东西用我自己的语言叙述出来。可能会有一些误解,希望各位能指正。有什么问题请尽情在下面的评论栏留言,共同进步,互相学习!:-)

另外由于这书上的翻译和大多数的翻译有所出入,所以我就不用书上的术语了,看着怪难受。


第1条 了解Objective-C语言的起源

Runtime

与C++等语言不同,Objective-C的许多操作都是在运行时(Runtime)完成的。Objective-C的运行时相关的代码,苹果是开源出来了的,可以在这里下载

关于对象

对象都必须像NSString *string = @"haha"这样声明。其意义在于string是一个指向NSString的指针,这样OC中的对象就都是占用的堆空间了。

下面我们来看

NSString *someString = @"Hello World";
NSString *anotherString = someString;

问题来了,请各位分析一下目前在堆和栈上分别分配了一些什么东西?

答案在此: 在栈空间有两个指针,someStringanotherString。二者均指向了分配在堆中的NSString类型的数据。

结构体

Objective-C是C语言的超集,有很多C语言的特性。在Objective-C中有很多类型的变量在声明时不需要打*号

例如:int, long, float, double等。

也有Apple提供的一些框架(如CoreGraphics)中也有一些结构体(如CGRect, CGPoint等等),可能会被误认为是对象,但其实是结构体。结构体以及上述的C语言基本数据类型,在声明的时候是不需要打*号的。他们都在中~~~