美文网首页
Ios面试复习--变量

Ios面试复习--变量

作者: 金克拉拉拉拉 | 来源:发表于2017-12-05 02:41 被阅读0次

    1.成员变量修饰符

    成员变量修饰符

    实例变量既可以在interface 也可以在@implementation 中定义

    写在@implementation 中的成员变量默认就是私有成员变量并且和@private 修饰不同 在@implementation 中定义的成员变量不外漏,别的类中既无法查看也无法访问

    2.@property

    在Xcode 4.4 之前 @property 自动生成 setter getter 的声明

    在4.4之后 @property 自动实现属性的声明和实现 并自动赋值给该属性X对应的成员变量_X

    其中_X 变量是私有变量 

    若同时重写@property 声明属性X的setter 和 getter 方法 则不会帮你自动生成相对应的_X成员变量

    3.@synthesize

    在Xcode 4.4 之前 @synthesize 自动生成 setter getter 的实现 

    --1.@synthesize 后告诉编译器,需要实现那个@property生成的声明和实现

    既在编译阶段实现setter 和 getter 方法

    --2.@synthesize 需要紧挨个传入的属性 赋值给哪个成员变量和返回哪个成员变量告诉调用者

    --3.若是@synthesize 后面没有告诉系统将传入的只值赋值给那个成员变量,系统会扣人赋值给和@synthesize 后面声明的属性名称相同的成员变量

    --4.@synthesize 后面声明 没有声明属性的赋值成员变量时,该属性会默认赋值给和自己属性名称相同的成员变量 (@property 不同),该成员变量可以未被声明

    4.@property 修饰符号

    @property(xxx) int age;

    --1.readonly 只生成get方法没有set方法

    --2.readwrite 默认属性,生成get 和 set方法

    --3.getter = fooFuncName 重新声明getter方法

    --4 setter =fooFuncName 重新声明setter方法 同 getter 方法同理

    5. 动态数据类型id

    id 为动态数据类型 

    --1.静态类型和动态类型

    静态类型:

    将一个指针变量定义为特定类的对象时,使用的是静态类型,在编译的时候就知道这个指针变量所属的类,这个变量是储存特定类的对象

    Person *p = [Person new];

    动态类型:

    知道执行时才能确定对象所属的类

    id obj = [Person new];

    id 相当于NSObject * 为一个万能指针 因为所有的类都继承于NSObject

    通过动态数据类型定义的变量,可以调用子类特有的方法

    通过动态数据类型定义的变量,可以调用私有方法

    弊端:由于动态数据类型可以调用到任意方法,所以有可能调用到不属于自己的方法(父类调用子类方法),而编译时又不会报错,导致运行时错误

    为了避免动态数据类型引发的运行时错误 一般调用前会进行判断 

    相关文章

      网友评论

          本文标题:Ios面试复习--变量

          本文链接:https://www.haomeiwen.com/subject/nafqixtx.html