41、#import跟 #include 有什么区别,@class呢,#import<> 跟 #import””有什么区别? |
1). #import 是Objective-C导入头文件的关键字,#include 是C/C++导入头文件的关键字,使用 #import 头文件会自动只导入一次,不会重复导入。 |
2). @class 告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含。 |
3). #import<> 用来包含系统的头文件,#import”” 用来包含用户头文件。 |
🚀🚀🚀🚀🚀🚀 |
42、解释Object-C frame 和 bounds 的异同 ? |
1、frame不管对于位置还是大小,改变的都是自己本身 |
2、frame的位置是以父视图的坐标系为参照,从而确定当前视图在父视图中的位置 |
3、frame的大小改变时,当前视图的左上角位置不会发生改变,只是大小发生改变 |
4、bounds改变位置时,改变的是子视图的位置,自身没有影响; 其实就是改变了本身的坐标系原点,默认本身坐标系的原点是左上角(0,0)。 比如origins改为(0,100),那么左上角坐标变成了(0,100), 子视图的坐标就要相对于(0,100)布局。 |
5、bounds的大小改变时,当前视图的中心点不会发生改变,当前视图的大小发生改变,看起来效果就想缩放一样 |
🚀🚀🚀🚀🚀🚀 |
43、 Objective-C的类可以多重继承么?可以实现多个接口么? |
Object-c的类没有多继承, 只支持单继承, 如果要实现多继承的话, 可以通过类别和协议的方式来实现, OC类似于多继承,是在 用protocol委托代理来实现的; 可以实现多个接口,通过实现多个接口可以完成C++的多重继承; |
Category 是类别, 一般情况用分类好, 用Category去重写类的方法, 仅对本Category有效, 不会影响到其他类与原有类的关系。 |
🚀🚀🚀🚀🚀🚀 |
44、 Object-C @property 的本质描述 ? |
@property 的本质是什么? @property = ivar + getter + setter; “属性” (property)有两大概念:ivar(实例变量)、getter+setter(存取方法) |
“属性” (property)作为 Objective-C 的一项特性,主要的作用就在于封装对象中的数据。 Objective-C 对象通常会把其所需要的数据保存为各种实例变量。 实例变量一般通过“存取方法”(access method)来访问。 其中,“获取方法” (getter)用于读取变量值,而“设置方法” (setter)用于写入变量值 |
🚀🚀🚀🚀🚀🚀 |
45、Object-C @property中有哪些属性关键字? |
属性可以拥有的特质分为四类:
|
🚀🚀🚀🚀🚀🚀 |
46、属性关键字 readwrite,readonly,assign,retain,copy,nonatomic 作用简述 ? |
1). readwrite 是可读可写特性。需要生成getter方法和setter方法。
|
🚀🚀🚀🚀🚀🚀 |
47、简述 系统对象的 copy 与 mutableCopy 方法? |
不管是集合类对象(NSArray、NSDictionary、NSSet ... 之类的对象),还是非集合类对象(NSString, NSNumber ... 之类的对象),接收到copy和mutableCopy消息时,都遵循以下准则: 1. copy 返回的是不可变对象(immutableObject);如果用copy返回值调用mutable对象的方法就会crash。 2. mutableCopy 返回的是可变对象(mutableObject)。 |
一、非集合类对象的copy与mutableCopy
|
二、集合类对象的copy与mutableCopy (同上)
但是:集合对象的内容复制仅限于对象本身,对集合内的对象元素仍然是指针复制。(即单层内容复制)
|
🚀🚀🚀🚀🚀🚀 |
48、简述代码问题:@property (nonatomic, copy) NSMutableArray *arr; |
添加, 删除, 修改数组内的元素的时候, 程序会因为找不到对应的方法而崩溃。
|
🚀🚀🚀🚀🚀🚀 |
49、写Setter 方法用于完成 @property (nonatomic, retain) NSString *name, 写一个 setter 方法用于完成 @property (nonatomic, copy) NSString *name |
// retain
|
🚀🚀🚀🚀🚀🚀 |
50、阐述@synthesize 和 @dynamic 作用? |
@synthesize 是系统自动生成getter和setter属性声明
@synthesize 意思是,除非开发人员已经做了,否则由编译器生成相应的代码,以满足属性声明。
|
🚀🚀🚀🚀🚀🚀 |