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方法的声明和实现;是只读的,在@implementation中,只需要一个读取器。如果你试图使用点操作符为属性赋值,将得到一个编译错误。
3.assign:set方法的实现是直接赋值,用于基本数据类型,不更改索引计数。在使用垃圾收集的应用程序中,如果一个属性使用assign,且这个类符合NSCopying协议,则要明确指出这个标记,而不是简单地使用默认值,否则的话,将得到一个编译警告。(这再次向编译器说明你确实需要赋值,即使它是可拷贝的。??没看懂)
4.retain:set方法的实现是release旧值,retain新值,用于OC对象。而不能用于Core Foundation对象(因为Core Foundation对象没有引用计数)
eg:
-(void)setName:(NSString *)name{
if (_name != name) {
[_name release];
_name = [name retain];
}
}
5.copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型。
-(void)setName:(NSString *)name{
if (_name != name) {
[_name release];
_name = [name copy];
}
}
*******copy和retain的区别*******
copy是建立了一个相同的对象,而retain不是。
比如一个NSString对象,地址为Ox000111,内容为"name"
copy到另外一个NSString之后,地址为0x000222,内容相同,新的对象的retain为1,旧的对象没有变化;
retain到另外一个NSString之后,地址相同,为0x000111,内容也相同,旧的对象的retain值+1;
********end**************
6.nonatomic:非原子性,set方法的实现不加锁,比atomic的性能高,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。
7.atomic:原子性,设置成员变量的@property属性时,默认为atomic,提供多线程安全。setter函数会变成下面的:
-(void)setName:(NSString *)name{
{lock}
if (_name != name) {
[_name release];
_name = [name retain];
}
{unlock}
}
nonatomic禁止多线程,变量保护,提高性能。
atomic是Objc使用的一种线程保护技术,是防止在写未完成的时候被另外一个线程读取,造成数据错误,是非常耗费资源的。如果没有使用多线程的通讯编程,则nonatomic是不错的选择。如果不指定nonatomic,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了nonatomic,那么访问器只是简单地返回这个值。
8.strong:和retain一样,在使用时,引用计数也会加一。当所有指向它的strong类型都释放时,它会被释放,所有指向它的weak类型,都会被清空。
9.weak,弱引用,当循环引用时,使用weak。当weak指针指向的对象一被释放,这些weak指针将被置为nil,有效地防止了野指针。同时weak不增加引用计数。
未完待续--
iOS面试题01的更多相关文章
- iOS笔试题01
1. #import 跟#include.@class有什么区别?#import<> 跟 #import”"又什么区别? 1> #import和#include都能完整地包 ...
- 最全的iOS面试题及答案-转载
1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承:可以实现多个接口,通过实现 ...
- IOS面试题总结
iOS面试题: 一:网络理论知识的理解 1:Internet物理地址和IP地址转换采用什么协议 ARP(Address Resolution Protocol)地址解析协议 2:Internet采用哪 ...
- iOS面试题及答案2015.6.7
iOS面试题及答案 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承 ...
- iOS 面试题 总结
#include <iostream> using namespace std; int main () { char p[]={'a','b','c'}, q[]="abc&q ...
- [转载]iOS面试题总
转载自:http://blog.sina.com.cn/s/blog_67eb608b0101r6xb.html (2014-06-13 20:23:33) 转载▼ 标签: 转载 crash 原文 ...
- 试答卓同学的 iOS 面试题
卓同学昨天写了一篇文章<4道过滤菜鸟的iOS面试题>.我手痒决定默写一个参考答案.后来发现不认真回答被大家喷成狗,所以决定积极改造,重新做人.下面就是修编之后的答案. 1. struct和 ...
- iOS面试题大全-点亮你iOS技能树
所有的内容大部分来自于网络的搜集,所以我不是一个创造者,而是一个搬运工.我尽量把题目,尤其是参考答案的出处列明.若有任何疑问,建议,意见,请联系我. 第一部分面试题来源于iOS-Developer-I ...
- 原 iOS面试题收集
原 iOS面试题收集 发表于2年前(2013-07-22 13:47) 阅读(369) | 评论(0) 4人收藏此文章, 我要收藏 赞0 听云性能监测产品App.Server.CDN免费试用,绑定 ...
随机推荐
- 从一个action地址获取信息
get方法 String url_str ="http://127.0.0.1:8400/lxyyProduct/getProductUserNeedUpdate.action?ts=&qu ...
- TYVJ P1020 寻找质因数
做题记录:2016-08-08 描述 给出N个数字,试求质因数最大的数字. 输入格式 第一行,一个整数N,表示数字个数.接下来N行,每行一个整数A_i,表示给出的数字. 输出格式 一个整数,表示质因数 ...
- 给NSString增加Java风格的方法
给NSString增加Java风格的方法 文章目录 我实在受不了 NSString 冗长的方法调用了,每次写之前都要查文档.特别是那个去掉前后多余的空格的方法,长得离谱.与之对应的别的语言,拿 jav ...
- Qt OpenCV Support Image Type 支持读写的图像格式
Qt 支持的图片格式如下: Format Description Qt's support BMP Windows Bitmap Read/write GIF Graphic Interchange ...
- JS。 问题类型:穷举,迭代。两个关键词:break和continue
问题类型: 穷举:(在不知道什么情况下是我们需要的结果的时候只能够让它一个一个都给走一遍) 百鸡百钱:公鸡1钱,母鸡2钱,小鸡0.5钱. 思路: 公鸡买100只,母鸡,小鸡都是0只: 母鸡50只,公鸡 ...
- handler的理解笔记
应用程序启动时,Android首先会开启一个主线程,如果此时需要一个耗时的操作,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,这个时候我们需要把这些耗时的操作,放在一个子线 ...
- PAT天梯赛练习题 L2-013 红色警报(并查集+逆序加边)
L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ...
- ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor.error:34 - Developer Notification
We are trying to migrate from Struts 2.2 to Struts 2.3, after getting to run the project I am seeing ...
- Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5:compile
mvn clean mvn install mvn clean -Dmaven.test.skip=true install 出现上述问题,找不到很多类的一些方法. 解决方法: 1.Window -- ...
- Git 忽略一些文件不加入版本控制
在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法.这个文件每一行保存了一个匹配的规则例如: # 此为注释 – 将被 Git 忽略 *.a ...