一面
static关键字的作用是什么?
- static关键字主要是用来声明全局变量的。它的内存只被分配一次,下次使用时仍维持上次的值。
- 我们可以在一个类中声明一个static变量,那么这个变量就可以在所有的类中声明的方法中使用,但是不能被其他类的函数访问。
- 我们经常会在cellForRow那个UITableviewCell的代理方法中做如下声明:
static NSString *CellIdentifier = @"Cell"
这个CellIdentifier只能在该方法体内访问,其他方法无法去访问
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self run];
age++;
[self run];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)run {
static NSInteger age = 10;
NSLog(@"xiaoming's age is :%ld",(long)age);
}
@end
就像上面,age++就会报错,因为我们是声明在run函数里面的,所以只能在run函数里访问。
ARC下NSString属性用copy和strong修饰的区别是什么?
- 在ARC情况下,如果源字符串是NSString时,由于字符串不可变,所以不管是strong还是copy属性的对象,都是指向源对象,copy只是进行了浅拷贝。
- 而如果源字符串是NSMutableString的话,strong是强引用,只是增加了源字符串的引用计数,而copy则是对源字符串进行了深拷贝,产生了一个新的对象,而且开辟了新的内存空间。此时如果我们修改源字符串的值,那么strong特性的字符串也会跟着修改,而copy的则不变。
- 大多情况下,建议使用copy,因为一般我们将对象声明为NSString时,都不希望它改变。
直接定义一个字符串的变量,会有默认的修饰符,这个修饰符是什么?
对于(普通的OC对象来说)字符串变量默认的修饰符是atomic,readwrite,strong 对于基本的数据类型默认的关键字是assign,atomic,readwrite
请手写MRC下一个NSString *a 的setter方法
- (void)setA:(NSString *)a {
if(_a != a) {
[_a release]; //释放旧值
_a = [a retain]; //保持新值
}
}
请解释一下+load和+initialize两个方法的用法是什么?
- 用法
- 区别:
- load只要类所在文件被引用就会被调用,而initialize是在类或者子类的第一个方法被调用前调用。意思就是如果我们使用#inport就会调用load方法,但是不会调用initialize方法,只有在该类的或者子类的第一个方法被调用前才会调用。换句话说就是如果类实例化了或者其类方法调用了,那么就会执行initialize方法。
- load方法调用顺序:父类的优于子类的,类中的方法优于类别中的方法。
- 相同点:
- 方法只会调用一次
- 他们都是静态初始化器,类似与java的static{};类加载块。
- 我们不需要在这两个方法中使用super调用父类的方法。
- 如果该类没有实现load那么不管超级类如何实现,系统都不会调用此类的load方法。
loadView方法的作用是什么?
loadView在每一次使用self.view这个属性,并且self.view为nil的时候被调用,用以产生一个有效的sefl.view.
- 通知,代理,KVO的区别,以及通知的多线程问题?
- 怎么调试
EXC_BAD_ACCESS
错误? - Runtime项目用到没?
- SEL和IMP的区别?
- 设计一个图片缓存机制,具体用到什么存储?对展示图片加载table很慢如何操作?
- 仿照浏览器的收藏网页功能?
二面
- 在网络较差的情况相爱,特定一个网络请求可能会耗时2-4秒,此时怎么做提高用户体验?
- 预约会议室,会有n个团队预约当天会议室,时间各不相同,求最少需要几个会议室?例如:1预约的时间是9-11,2预约的时间是10-12,3预约的时间是12-14,此时会议最小个数是2个。