OC语言细节总结

1. OC中对象命名都是以指针的形式,因为OC中对象是不能压栈的!所以,不能定义一个对象,只能定义一个指向对象的指针。OC中的对象都是存在于堆中的,用一个指针指向该空间。因为在压栈的时候需要知道对象的大小,而在OC中继承关系是在运行的时候才关联的,所以程序在编译的时候不知道压栈空间为多大。像C++,它是静态语言,在编译的时候就会关联继承关系,所以C++中对象都是压栈的。同样,在OC中sizeof宏是不能计算对象大小的,因为该宏是在预编译的时候计算大小的,这个时候对象大小是没法获得的,但是在C++中可以。这也是C++编译比OC慢很多的原因!

2. OC中数组和字典存储的都是对象的地址,有些对象的地址可能会存在多个字典或者数组中,当在一个当中改变对象的值的时候,另一个数组或者字典中对象的值也会发生改变。

3. [属性 @property,@synthesize简析]

@property关键字

//声明一个属性,相当于声明了下面两个方法

@property NSString * name;

//- (void)setName:(NSString *)name;

//- (NSString *)name;

@synthesize name = _name;(绑定set和get方法所操作的字段)

//Xcode4.6以前,需要这样实现,如同实现了下面两个方法

//Xcode4.6起,无需写synthesize,自动实现下面两个方法,会自动关联名位_XXX的变量

//如果类中并没有对应的变量,会自动生成相应的变量_XXX。

关键在于:假设你自己在类中声明了一个name字段,这时类中会有两个字段一个是你自己创建的name,另一个是属性自己创建的_name字段。如果你声明的是name,可以这么写让get和set方法操作的是name而不是_name(@synthesize name = name;),这样类中只有一个字段(name), 而不存在(_name)了。

4. 匿名类别作用:

<1>.声明私有化的成员变量(替代方法:声明在实现部分)

<2>.前置声明私有化的成员方法(现在私有化的成员方法可以不前置声明)

<3>.声明私有化的属性

5ARC与非ARC转化

<1>.将不使用ARC的代码转成ARC代码

Edit —> Refactor —> Convert to ARC

<2>.ARC非ARC混编

//同一个工程中,部分文件使用ARC,部分文件不使用ARC。

Build phase -----> Complie Source

-fno-objc-arc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章