1.虽然Objective-C在语法上禁止类使用多继承,但是在协议的遵守上却允许使用多继承。所以可以用协议来实现多继承。
2.父类指针可以指向子类对象
3.一个对象(Object)的isa指向了这个对象的类(Class),而这个对象的类(Class)的isa指向了metaclass。这样我们就可以找到静态方法和变量了。
4.NSRange 各种初始化方法
NSRange range1;
// 分别赋值
range1.location = 18;
range1.length = 20;
print_range(range1);
// 结构初始化方法
NSRange range2 = {20, 40};
print_range(range2);
// 调用辅助的build函数
NSRange range3 = NSMakeRange(30, 60);
print_range(range3);
// 暂时没有确定的有意义的值,可以设置成NSNotFound
NSRange range4 = {NSNotFound, NSNotFound};
print_range(range4);
5.block
block是ios中一种比较特殊的数据类型
block的作用:
用来保存某一段代码,可以在适当的时间再取出来调用
功能类似于函数和方法
默认情况下block存储在栈中, 如果对block进行一个copy操作, block会转移到堆中
如果block在栈中, block中访问了外界的对象, 那么不会对对象进行retain操作
如果block在堆中, block中访问了外界的对象, 那么会对外界的对象进行一次retain
6.@synthesize
@synthesize在.m文件里自动生成了get/set方法。因此,我们只要在@implementation后面加上一行:@synthesize 就可以自动生成get/set方法了,省掉了很多麻烦。
从Xcode4.4开始,编译器会自动为每一条@property都添加一条对应的@synthesize,因此以后我们只要写一个@property就可以了!
- 点语法:编译器会自动将点语法转换成set、get方法的调用代码
copy和mutableCopy区别:
copy, 无论被复制的对象是否是可变的, 复制出来的副本都是不可变的
mutableCopy, 无论被复制的对象是否是不可变的, 复制出来的副本是可变的
// 从不可变到可变, 地址不一样
// 从可变到可变, 地址不一样
// 从可变到不可变, 地址不一样
// 从不可变到不可变, 地址一样
( 原因: copy核心就是为了保证修改其中一个对象不会影响到另外一个对象
由于源和副本都不可以被修改, 所以不用创建一个新的对象)
/*
总结:
核心: 修改源对象不会影响到副本对象, 修改副本对象不会影响到源对象
深拷贝和浅拷贝
会创建新的对象的拷贝, 我们称之为深拷贝
不会创建新对象的拷贝, 我们称之为浅拷贝(指针拷贝)
*/
对于mutableCopy,此重新创建了一个内存地址,为深拷贝。
而字符串默认是浅拷贝
9.// 只要在对象前面加上__block, 无论block在栈中还是堆中, 都不会对外界的对象进行retain操作
10.在ARC中 assign,weak,copy,strong 属性的作用,下列说法正确的是(多选)( ABCD )
A.copy : 一般用于NSString\block
B.strong : 一般用于除了NSString\block以外的OC对象
C.weak : 一般用于代理\UI控件 当2个对象相互引用,一端用strong,一端用weak
D.assign : 基本数据类型、枚举、结构体(非OC对象)
11.UIViewController在整个生命周期中,以下各个方法的调用顺序正确的是( A )
A. init -> viewDidLoad -> viewWillApper -> viewDidAppear -> viewWillDisapper -> viewDidDisapper
12.关于NSSet、NSArray、NSDictionary
NSArray 是顺序的,可以通过下标获取数组中的对象
NSDictionary 是无序的,通过键值对匹配,可以通过key-->value
NSSet、NSArray、NSDictionary只能保存Cocoa对象,不能用于保存C语言中的基本数据类型
13.iOS中代理设计模式
代理本身是一个对象,这个对象是专门代表被代理对象来和程序中其他对象打交道的。
代理的主要价值是它可以让你容易的定制各种对象的行为。
当一个类的某些功能需要被别人来实现,但是既不明确是些什么功能,又不明确谁来实现这些功能的时候,代理模式就可以派上用场。
-
import 是 #include 的替代指令,防止重复引用
15.代理和通知
共同点
利用通知和代理都能完成对象之间的通信
(比如A对象告诉D对象发生了什么事情, A对象传递数据给D对象)
不同点
代理 : 1个对象只能告诉另1个对象发生了什么事情
通知 : 1个对象能告诉N个对象发生了什么事情, 1个对象能得知N个对象发生了什么事情
16.好用的打包工具:
https://github.com/Caiflower/Autobuild
ipa包丢到fir.im上. 测试们自己扫码下载啊
http://fir.im/
17.#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
用法:self.richLabel.textColor = UIColorFromRGB(0x7e7e7e);
网友评论