iOS笔试题01
1. #import 跟#include、@class有什么区别?#import<> 跟 #import”"又什么区别?
1> #import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次
2> @class仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题
3> #import <> 用来包含系统自带的文件,#import “”用来包含自定义的文件
2. 属性readwrite,readonly,assign,retain,copy,nonatomic,atomic,strong,weak 各是什么作用,在那种情况下用?
1> readwrite:同时生成get方法和set方法的声明和实现
2> readonly:只生成get方法的声明和实现
3> assign:set方法的实现是直接赋值,用于基本数据类型
4> retain:set方法的实现是release旧值,retain新值,用于OC对象类型
5> copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型
6> nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)
7> atomic:原子性,线程安全,set方法的实现加锁。
8> strong:强指针引用的对象,系统不会自动释放
9> weak:弱指针引用的对象,系统会立即释放
ARC中的@property参数使用小结:
1> 控件用weak 相当于MRC的assign
2> 属性对象用strong(如:NSArray *DataList)相当于MRC的retain
3> 非对象类型用assign 相当于MRC的assign
4> 字符串NSString用copy 相当于MRC的copy
strong和copy的区别:
ARC下copy在苹果的默认实现全是浅拷贝(除了对可变对象的copy) ,现在的strong和copy没有区别(不可变对象)。
使用strong,则与可变对象指向同一块内存区域,可变对象的内容改变,其赋值对象也跟着改变,因为两者是同一个指针;
而使用copy,在赋值之前,将可变对象内容复制,创建一个新的内存区域,所以两者不是一个指针地址,可变对象的改变不会导致其赋值对象的改变。深拷贝不变,浅拷贝变。
3. 写一个setter方法用于完成@property (nonatomic,retain)NSString *name,写一个setter方法用于完成@property(nonatomic,copy)NSString *name.
1> @property (nonatomic, retain) NSString *name;
- (void)setName:(NSString *)name
{
if (_name != name) {
[_name release];
_name = [name retain];
}
}
2> @property(nonatomic, copy) NSString *name;
- (void)setName:(NSString *)name
{
if (_name != name) {
[_name release];
_name = [name copy];
}
}
4. 对于语句NSString*obj = [[NSData alloc] init]; ,编译时和运行时obj分别是什么类型?
1> 编译时是NSString类型
2> 运行时是NSData类型
5. 常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?
1> 常用OC类型:NSString、NSArray、NSDictionary、NSData、NSNumber等
2> OC对象需要手动管理内存,C的基本数据类型不需要管理内存
6. id 声明的变量有什么特性?
Id声明的变量有运行时特性。id声明的变量能指向任何OC对象
5.2 instancetype & id
1> instancetype在类型表示上,跟id一样,可以表示任何对象类型
2> instancetype只能用在返回值类型上,不能像id一样用在参数类型上
3> instancetype比id多一个好处:编译器会检测instancetype的真实类型
7. Objective-C如何对内存管理的,说说你的看法和解决方法?
1> 每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁
2> 通过retain可以让对象的计数器+1、release可以让对象的计数器-1
3> 还可以通过autorelease pool管理内存
4> 如果用ARC,编译器会自动生成管理内存的代码。编译器会自动在适当的地方插入适当的retain、release、autorelease语句。你不再需要担心内存管理,因为编译器为你处理了一切。ARC并不是GC,它只是一种代码静态分析(Static Analyzer)工具。
8. 内存管理的几条原则是什么?按照默认法则.哪些方法生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
1> 谁创建谁释放。只要调用了alloc、copy、new方法产生了一个新对象,都必须在最后调用一次release或者autorelease
2> 谁retain谁release。只要调用了retain,都必须在最后调用一次release或者autorelease
3> @property如果用了copy或者retain,就需要对不再使用的属性做一次release操作
4> 如果用了ARC,编译器会自动生成管理内存的代码
1. 看下面的程序,三次NSLog会输出什么?为什么?
NSMutableArray* ary = [[NSMutableArray array] retain];
NSString *str = [NSString stringWithFormat:@"test"]; // 1
[str retain]; // 2
[ary addObject:str]; // 3
NSLog(@"%d", [str retainCount]);
[str retain]; // 4
[str release]; // 3
[str release]; // 2
NSLog(@"%d", [str retainCount]);
[ary removeAllObjects]; // 1
NSLog(@"%d", [str retainCount]);
结果:3、2、1
2. OC中创建线程的方法是什么?如果指定在主线程中执行代码?如何延时执行代码?
1> 创建线程的方法
- NSThread
- NSOperationQueue和NSOperation
- GCD
2> 主线程中执行代码
- [self performSelectorOnMainThread: withObject: waitUntilDone:];
- [self performSelector: onThread:[NSThread mainThread] withObject: waitUntilDone:];
- dispatch_async(dispatch_get_main_queue(), ^{
});
3> 延时执行
- double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,
(int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
});
- [self performSelector: withObject: afterDelay:];
- [NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:];
iOS笔试题01的更多相关文章
- YouKu iOS笔试题一
序言 最近收到某某同学将去youku的iOS笔试题的邮件,希望笔者能整理一下,并提供参考答案.笔者决定整理出来,并分享给大家.当然,与此同时,也想看看youku的笔试题到底有多难,也考考自己有多少料吧 ...
- 一份中规中矩的 iOS笔试题
一.背景 因为一些原因,我从公司离职,在此之前,我需要帮忙招聘一个新人来做我的工作,于是就有了这篇文章. 由于公司项目16年就已经上线了,前同事写的项目中,有用xib.storyBoard.代码自动布 ...
- 2016年iOS笔试题
收集了一些ios面试的一些基础的试题,其中也有一些较难的 1.请简述UIView与CALayer有什么不同.2.Block什么情况下会保留实体内引用到外部对象,什么时候要用__block或__weak ...
- ios笔试题(选择题)
1-10 C语言 & 计算机基础 1.请看下面一段代码 static int a = 1; int main(){ int b = 2; char *c = NULL; c = (char * ...
- ios笔试题
最近找工作,有面试有笔试部分,故把笔试题自己整理了下. 面试能力要求:精通iphone的UI开发,能熟练操作复杂表视图,熟练使用图层技术, 可以自定义UI控件,使用类别扩展系统控件功能; 擅长通讯 ...
- iOS笔试题04
1. Object-C有多继承吗?没有的话用什么代替? 1> OC是单继承,没有多继承 2> 有时可以用分类category和协议protocol来代替多继承 2. Object-C有私 ...
- iOS笔试题02
1. Difference between shallow copy and deep copy? 1> 浅拷贝:指针(地址)拷贝,不会产生新对象 2> 深拷贝:内容拷贝,会产生新对象 2 ...
- 面试中遇到的iOS笔试题
1.浅复制和深复制的区别? 2.类别的作用(category)?继承和类别在实现有何区别? 3.类别(category)和类扩展(extension)的区别. 4.obc中的协议和java中的接口概念 ...
- iOS面试题01
1.#import和#include.@class有什么区别?#import<>和#import“”又有什么区别? 答:1.#import和#include都能完整地包含某个文件的内容,# ...
随机推荐
- 「数据结构与算法之链表(Python)」(四)
什么是链表 顺序表的储存分为一体式结构和分离式结构,但总的来说存储数据的内存是一块连续的单元,每次申请前都要预估所需要的内存空间大小.这样就不能随意的增加我们需要的数据了.链接就是为了解决这个问题.它 ...
- 分页器,序列化组件,bulk_create,choices字段
分页器 <!--前端--> {% for book in page_queryset %} <p>{{ book.title }}</p> {% endfor %} ...
- mac XXX 已损坏,打不开。 您应该将它移到废纸篓。
mac 上的软件我改了某些配置,打开提示这个. 是因为安全认证问题. 在系统偏好设置里面,安全与隐私设置为允许任何来源就可以. 如果新版系统没有这个选项,那么在命令行输入:sudo spctl --m ...
- 43、扩展原理-@EventListener与SmartInitializingSingleton
43.扩展原理-@EventListener与SmartInitializingSingleton 还可以使用 @EventListener; 来监听事件 原理:使用EventListenerMeth ...
- Codeforces Round #603 (Div. 2) A,B,C,D【E题待补】
#include<bits/stdc++.h> using namespace std; #define int long long signed main(){ int _; cin&g ...
- css3 2D变形(transform)移动、缩放、旋转、倾斜
一. translate(x,y) 或者translateX(x)或者translateY(y) 注意点:translateX(x)和translateY(y)大写X和Y:只写一个值,默认y=0. & ...
- 3、Web server 之httpd2.2 配置说明
http协议实现的程序 静态(httpd, nginx, lighttpd) 动态 (IIS, tomcat, jetty, jboss, resin, websphere, weblogic ...
- (转)awk 详解
出处:https://blog.51cto.com/yijiu/1358416 awk详解 awk是一款非常牛逼的报告生成工具,能够将文本格式化成显示为比较直观的结果 废话不多说,直接上例子 awk的 ...
- Hadoop(3)如何构建HDFS--HA,YARN---HA
什么是HA? HA的意思是High Availability高可用,指当当前工作中的机器宕机后,会自动处理这个异常,并将工作无缝地转移到其他备用机器上去,以来保证服务的高可用. HA方式安装部署才是最 ...
- 树莓派安装配置Nginx+PHP7+MariaDB
原文地址:http://blog.sina.com.cn/s/blog_150f554f50102yhra.html 一.安装 Nginx 和 PHP7 1.安装Nginx sudo apt inst ...