1、成员变量和属性的区别
@interface Person : NSObject { NSString *_sex; } @property (nonatomic, copy) NSString *name; @end //定义一个Person类,在类里面分别定一个成员变量_sex和属性name
成员变量:
1. 成员变量的默认修饰是@protected。
2. 成员变量不会自动生成set和get方法,需要自己手动实现。
3. 成员变量不能用点语法调用,因为没有set和get方法,只能使用->调用。
属性:
1. 属性的默认修饰是@protected。
2. 属性会自动生成set和get方法。
3. 属性用点语法调用,点语法实际上调用的是set和get方法。
2、结构体和类的区别
//结构体 struct Worker{ NSString *postOfDuty; NSString *department; } Worker1,Worker2; //类 @interface Progremer :NSObject{ @public NSString *_name; } @end @implementation Progremer @end
1、类是引用类型,结构体是值类型,值类型的传递和赋值时是复制操作(不会改变原始对象),而引用类型则只会使用引用对象的一个指向,即对象的地址(会改变原始对象);(详见下面分析)
2、结构体只能封装属性,类却不仅可以封装属性也可以封装方法。如果一个封装的数据有属性也有行为,就只能用类了;
3、结构体变量分配在栈,而OC对象分配在栈的空间相对于堆来说是比较小的,但是存储在栈中的数据访问效率相对于堆而言是比较高。所以,我们使用结构体的时候最好是属性比较少的结构体对象,如果属性较多的话就要使用类了。
4、类可以集成,这样子类可以使用父类的特性和方法,而结构体不可以;