1、如下代码,在一个控制器中有如下代码,请问view执行最后一行[view release]后,有没有被释放?为什么?或者更高深的问法:
如下代码,在一个控制器中有如下代码,请问view执行最后一行[view release]后,为什么还在屏幕上显示着?为什么?
UIView *view = [[UIView alloc] initWithFrame:];
[self.view addSubview:view];
[view release];
解析:没有释放。因为self.view addSubview:将view加载到一个数组中,数据中加入的实例的计数器均会被加1,即view的retainCount这个时候等2,release后仍然为1,并没有从内存释放,所以仍然显示在屏幕上。
这道题目的重点是考察MRC的内存管理理解
2、阐述一下MVC及MVP
解析:MVC即数据模型、视图、控制器三层模型。视图与数据模型不直接交互,而是通过控制这个桥梁进行集中式管理与调用。MVP高深的这里不多说,你可以网上查一下学习了解一下。但是如果面试人员说MVP好时,你就可以狠狠的怼一下!MVP视觉上只是将MVC的代码像拉屎一样拉的到处都是,只是将控制器中的代码拆分出去,并没有达到高效及易用的目的!是一种变态无耻的开发模式,他的存在,只是部分开发人员自我感觉良好而使用的一种低级方案。MVP并没有将代码规模减少甚至增加了代码的类定义,美其名曰为解耦,实则是打着解耦的名义行垃圾之实,让代码逻辑极其分散。
3、请认真阅读分析以下代码,请问存在什么问题?如何解决此问题?
NSMutableArray *adataList = [NSMutableArray arrayWithCapacity:0];
[adataList addObject:@"1"]
[adataList addObject:@"2"]
[adataList addObject:@"3"]
[adataList addObject:@"4"]
[adataList addObject:@"5"]
[adataList addObject:@"6"]
for (NSInteger idx=3; idx<6; idx++)
{
[adataList removeObjectAtIndex:idx];
}
解析:随着for循环的进行数组中的元素不断被删除,但是int索引器并未相应的减小,导致数组越界而崩溃。这里给出三种解决方案。其他方案,读者同学自行研判。
解决方式一、
[adataList enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { [adataList removeObject:obj]; }];
解决方式二、
NSMutableArray *adataList = [NSMutableArray arrayWithCapacity:0]; [adataList addObject:@"1"] [adataList addObject:@"2"] [adataList addObject:@"3"] [adataList addObject:@"4"] [adataList addObject:@"5"] [adataList addObject:@"6"] NSMutableArray *temoList = [NSMutableArray arrayWithArray:adataList]; for (NSInteger idx=3; idx<6; idx++) { NSString *e = [temoList objectAtIndex:idx]; [adataList removeObject:e]; }
解决方式三、
NSMutableArray *adataList = [NSMutableArray arrayWithCapacity:0]; [adataList addObject:@"1"] [adataList addObject:@"2"] [adataList addObject:@"3"] [adataList addObject:@"4"] [adataList addObject:@"5"] [adataList addObject:@"6"] [adataList removeObjectsInRange:NSMakeRange(3,3)];
4、按照如下连接要求,实现算法输出:OC 将不定层次未知深度的json数据转化为单层结构
注:此题相当高级,没有一定基础的逻辑思维是无法实现的。
4、有如下继承于UIButton的类,请仔细观察回答提出的问题。
有如上代码,请问
touchTarget = target;
之后touchTarget的引用计数器是否与target的引用计数器相等。
解析:不相等,赋值之后,会导致target的引用计数器加1,默认为retain(strong)赋值。