测试题1 IOS面试基础题
免责声明:答案来自本人,错误之处敬请谅解
1、用变量a写出以下定义
a、一个整型数 int a=5;
b、一个指向整型数的指针 int *a;
c、一个指向指针的指针,它指向的指针是指向一个整型数 int * *a;
d、一个有10个整型数的数组 int a[10]={0};
e、一个有10个指针的数组,该指针是指向一个整型数的 int *a[10];
f、一个指向有10个整型数数组的指针int (*a)[10];
g、一个指向函数的指针,该函数有一个整型参数,并返回一个整型数 int (*a)(int);
2、用预处理#define
a、声明一个常数,用以表明1年中有多少秒(忽略闰年)
#define SECONDS_IN_YEAR (365*24*60*60)
b、宏MIN,输入两个参数并返回较小的那个
#define MIN(a,b) (a)<(b)?(a):(b)
3、sprintf,strcpy,memcpy的功能?使用上要有哪些要注意的地方
sprintf字串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。注意:不要忘记了第一个参数
strcpy把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间.注意: src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
memcpy从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中,注意: 如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。
4、volatile 是什么含义,给出三个不同例子
它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 多线程应用中被几个任务共享的变量
5、sizeof和strlen的区别和联系
sizeof简单的说其作用就是返回类型所占的内存字节数。
strlen计算字符串的长度,不包括'\0'在内
6、do-while和while-do的区别
do-while先进行一次循环再做条件判断,while-do是先条件判断,如果为真就执行循环体.
7、重写一个NSStirng类型的,retain方式声明name属性的setter和getter方法
-(void)setName:(NSString *name)
{
if(_name!=name)
{
[_name release];
_name=(name copy);
}
return _name;
}
-(NSString *)name
{
return _name;
}
8、简述objective-c的内存管理要点
1,首先OC内存管理采用的是引用计数机制;2, OC语言在mac平台和ios平台有区别,mac具有垃圾回收机制,ios平台没有.3,在ios平台有两种方式完成引用计数机制的内存管理功能 ARC和MRC.4,非ARC的方式引用技术机制的实现原理:创建对象的时候使用alloc,retain,copy等方式使retainCount加1,这些对象需要调用release 或autorelease来使retainCount减1,减到零调用此对象的dealloc方法释放内存.5,最后,这就是OC的内存管理
9 、简述NSAutoreleasePool的作用的工作机制
这个池(pool)类似数据结构中的堆栈(Stack),相当于一个容器,每次对象调用autorelease方法时,对象的引用计数并不真正变化,而是向pool中添加一条记录,记下对象的这种要求。最后当pool发送drain或release消息时,池中的所有对象的这种要求一一被执行(即:pool被销毁前,会通知池中的所有对象,全部发送release消息真正将引用计数减少)
10、drawRect和layoutSubviews的区别
当调用view的setNeedsDisplay时,系统异步调用drawRect方法,并配制图形的上下文供在此方法内使用Quartz2D API。
当调用view的setNeedsLayout时,系统异步调用layoutSubviews方法,但不配制图形上下文,只做页面布局使用
11、简述NotificationCenter的工作机制,并说明KVO、KVC的区别
Notification 是观察者模式的实现,KVO是观察者模式的OB-C底层实现。NOtification 通过 notifydcation addobserver 和 remove observer
工作。
KVO是键值监听,当监听的数值改动时,会通知注册的观察对象。
KVC是键值编码,通过一种 hash 把属性映射到一个管理字典上。
12、多线程在ios开发中的做用,常用的多线程类和方法有哪些。
使用多线程可以:
■ 提高应用程序的响应
■ 更有效地使用多处理器
■ 改进程序结构
■ 占用较少的系统资源
iPhone 中的线程应用并不是无节制的,官方给出的资料显示iPhone OS下的主线程的堆栈大小是1M,第二个线程开始都是512KB。并且该值不能通过编译器开关或线程API函数来更改。只有主线程有直接修改UI的能力。
1.使用NSThread,创建一个NSThread的对象,调用其start方法。
2.使用 detachNewThreadSelector:toTarget:withObject:这个类方法创建一个线程,这个比较直接了,直接使用目标对象的方法作为线程启动入口。
2.使用NSObject,其实NSObject直接就加入了多线程的支持,允许对象的某个方法在后台运行。如: [myObj performSelectorInBackground:@selector(doSomething) withObject:nil];
3.NSOperation&NSOperationQueue
很多时候我们使用多线程,需要控制线程的并发数,毕竟线程也是消耗系统资源的,当程序中同时运行的线程过多时,系统必然变慢。 所以很多时候我们会控制同时运行线程的数目。
NSOperation可以封装我们的操作,然后将创建好的NSOperation对象放到NSOperationQueue中,OperationQueue便开始启动新的线程去执行队列中的操作,OperationQueue的并发度是可以通过如下方式进行设置:
4.GCD
GCD是Grand Central Dispatch的缩写,是一系列的BSD层面的接口,在Mac 10.6 和iOS4.0以后才引入的,且现在NSOperation和NSOperationQueue的多线程的实现就是基于GCD的。目前这个特性也被移植到 FreeBSD上了,可以查看libdispatch这个开源项目。
比如一个在UIImageView中显示一个比较大的图片
- dispatch_queue_t imageDownloadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- dispatch_async(imageDownloa);
当然,GCD除了处理多线程外还有很多非常好的功能,其建立在强大的kqueue之上,效率也能够得到保障。
测试题1 IOS面试基础题的更多相关文章
- 一些iOS面试基础题总结
一些iOS面试基础题总结 目录 多线程 AutoLayout objc_msgSend Runtime 消息转发 Category NSObject 与 objc_class Runloop Auto ...
- iOS 面试基础题
1.UIWindow和UIView和 CALayer 的联系和区别? 答:UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以在屏幕上响应 ...
- iOS 面试基础题目
转载: iOS 面试基础题目 题目来自博客:面试百度的记录,有些问题我能回答一下,不能回答的或有更好的回答我放个相关链接供参考. 1面 Objective C runtime library:Obje ...
- 前端面试基础题:Ajax原理
Ajax 的原理简单来说是在⽤户和服务器之间加了—个中间层( AJAX 引擎),通过XmlHttpRequest 对象来向服务器发异步请求,从服务器获得数据,然后⽤ javascrip t 来操作 D ...
- java面试基础题(三)
程序员面试之九阴真经 谈谈final, finally, finalize的区别: final:::修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此 ...
- ios面试基础
1.#import和#include的差别 @class? @class一般用于头文件里须要声明该类的某个实例变量的时候用到,在m文 件中还是须要使用#import 而#import比起#includ ...
- C#面试基础题1
1.简述 private. protected. public. internal 修饰符的访问权限.(C++中没有internal) private : 私有成员, 在类的内部才可以访问 ,也就是类 ...
- Linux面试基础题-2
继续我们这面试系列,在这篇文章里我们给出了10个问题.这些问题或者是在以后的文章中出现的问题不一定在面试中会被问到.然而通过这些文章我们呈现出的是一个交互的学习平台,这必将会对你有很大的帮助. 自本系 ...
- iOS面试小题集锦
1.Object-C有多继承吗?没有的话用什么代替? cocoa 中所有的类都是NSObject 的子类 多继承在这里是用protocol 委托代理 来实现的你不用去考虑繁琐的多继承 ,虚基类的概 ...
随机推荐
- C语言中static变量详解
Static翻译出来是“静态”“静止”的意思,在C语言中的意思其实和它的本意差不多,表示“静态”或者“全局”的意思,用来修饰变量和函数.经static修饰过后的变量或者函数的作用域或者存储域会发生变化 ...
- IOS开发设计思路
我在做 iOS 开发的时候,发现自己在写程序的时候,常常处于两种状态的切换,我把这两种状态称为软件开发的上帝模式与农民模式.我先给大家介绍一下这两种模式的特点. 上帝模式 处于上帝模式时,我需要构思整 ...
- input覆盖select实现select可写可选择
1.有时需要一个select选择框,但是对select选择框希望是既可以选择也可以进行输入.下边的代码就是在select选择框上放了一个input框,覆盖在select上面.实现伪装的select效果 ...
- How to decide on the correct number of clusters?
Determining the number of clusters/segments in hierarchical clustering/segmentation algorithms 由于uni ...
- php中PCRE正则表达式分隔符的使用
转自:http://www.baiwar.com/post/the-use-of-php-pcre-regex-delimiter.html 在php5.3.0以前,PHP可使用两套正则表达式规则,一 ...
- db2权限控制(转)
转自:http://gocom.primeton.com/blog16274_23254.htm db2权限控制 1. DB2 权限控制数据库安全性计划的以下几方面: 授予用户的权限级别 允许用户运行 ...
- 本地电脑localhost指向127.0.0.1的配置
windows系统电脑,我们如果想访问本机部署的项目,通常使用的是localhost来指向本机,但是有时候发现不行,我们不妨打开资源管理器,C:\Windows\System32\drivers\et ...
- Asp.Net MVC3.0网站统计登录认证的在线人数
Asp.Net MVC3.0网站统计登录认证的在线人数 前言 对于一个网站来说,统计在线人数是一个很重要的工作.平时也发现很多的网站论坛等都有在线人数的显示.对于一个网站如果在线人数很多,用户看到了这 ...
- 判断一个字符串是否为有效ip地址
bool f (const char *s) { int s1,s2,s3,s4; ) { return false; } if ((s1 & 0xffffff00) || (s2 & ...
- mysql数据库 安装 (原创)
1.首先下载mysql 数据库,我安装的是mysql5.1版本,直接安装就行,但是如果以后你想在数据库里显示中文的话,要把字符集设置为gb2312 2.配置数据源odbc. mysql-connec ...