Ios面试复习--变量

2017-12-05  本文已影响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

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读