iOS中容易混淆的知识点(持续更新中)

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、类可以集成,这样子类可以使用父类的特性和方法,而结构体不可以;

 

 

 

 

iOS中容易混淆的知识点(持续更新中)

上一篇:spring boot


下一篇:OpenCV完成ROS移动机器人寻迹运动