1 Objective-C提供了几种内存管理方式?请详细举例谈谈你对objective-C的内存管理策略的理解。
答:两种,ARC和手动管理(retain 、release 或autorelease)。1.new,alloc和copy方法创建一个对象时,该对象的保留计数器值为1.不再使用该对象时,要负责向该对象发送一条release或autorelease消息.这样,该对象将在使用寿命结束时被销毁. 2.通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,不需要执行任何操作来确保该对象被清理. 3.如果你保留了某个对象,需要(最终)释放或自动释放该对象.必须保持retain方法和release方法的使用次数相等。
2 在iOS发生事件时什么时候用delegate,什么时候用NSNotificationCenter?,两者有什么不同,请你写一个delegate的interface。
答:(1)用的时候这样选择:Delegate: 发送者告知事件会发生,delega同意后发送者响应事件,是一对一的关系。
(2)Notification: 消息的发送者告知接收者事件已经发生或者将要发生,接收者不能影响发送者行为,是一对多关系。
delegate效率更高。
(3)delegate例子:
@protocol : MyDelegate
@interface MyClass
{
id delegate;
}
@protocol MyClass
- (void)doSomething;
@end
3 @property中有哪些主要属性参数,请谈谈分别在什么下情况下使用?
答:readwrite:产生settergetter方法。
Readonly:只产生简单的getter,没有setter。
Assign:默认类型,setter方法直接赋值,而不进行retain操作。
Retain:setter方法对参数进行release旧值,再retain新值。
Copy:setter方法进行Copy操作,与retain一样。
Nonatomic:禁止多线程,变量保护,提高性能。
4 预处理命令中的宏一般有哪两种常用的用法,请写一个'标准'宏MIN ,这个宏输入两个参数并返回较小的一个。
答:(1)不带参数:#define 宏名 字符串。
带参数:#define 宏名(参数表)字符串。
#define MIN(a,b) ((a)<(b)?(a):(b))。
5 ios的沙盒机制是什么?沙盒中一般有哪几种目录结构,请谈谈每个目录结构应用于存储什么样的数据?如何避免你的应用数据存储违反iOS的数据存储指南?
答:默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件。
Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录。
Library:存储程序的默认设置或其它状态信息。
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除。
tmp:提供一个即时创建临时文件的地方。
6 谈谈你对iPhone专用程序和ipad专用程序的图标尺寸,命名规范以及设备尺寸的了解。
答:(1)iPhone:icon.png 57x57 。
icon@2x.png 114x114。
iPad:icon-72.png 72x72。
(2)iPhone4和4S为3.5英寸 iPhone5为4英寸。
iPad为9.7英寸。
7 谈谈你对Core Data的理解.
答:有了Core Data,就不必像用sqlite那样编写繁琐代码,减少工作量,也可以回避使用c的语法,降低ios开发的技术门槛。
8 ios中的block有什么用,定义一个名为maxBlock的block变量,输入两个整型参数返回较大的那个。
答:(1)Objective-C特性,一个函数里定义了个block,这个block就可以访问该函数的内部变量。
int (^maxBlock)(int a, int b) = ^(int a, int b){if(a > b)return a; else return b;};
9 frame,bounds ,center的区别。Iphone中获取屏幕尺寸的方法。
(1)frame:指的是视图在父视图的坐标系统中的大小和位置。
bound:指的是视图在试图本身的坐标系统中的大小(位置起点是原点)。
center:指的是视图在父视图坐标系统中的中心点。
(2)CGRect rx = [ UIScreen mainScreen ].bounds;
10 什么是GCD,举例说明在什么情况下使用。函数dispatch_sync ,dispatch_async , dispatch_once,dispatch_apply,分别有什么功能?
答:(1)GCD其实就是个多线程,它可以提高代码的执行效率与多核的利用率(2)dispatch_sync:主线程上运行。
dispatch_async:异步运行。
dispatch_once:代码仅会被运行一次,且保证线程安全,可用来创建单例。
dispatch_apply:运行传递来的块。
11 说明viewController的生命周期。
答:init->loadView->viewDidLoad->viewWillAppear->viewDidAppear->viewWillDisappear->viewDidDisappear->viewDidUnload->dealloc。
12 谈谈viewController的页面跳转方式
答:从一个Controller跳转到另一个Controller时,一般有以下2种:
1、利用UINavigationController,调用pushViewController,进行跳转;这种采用压栈和出栈的方式,进行Controller的管理。调用popViewControllerAnimated方法可以返回。
PickImageViewController *pickImageViewController = [[PickImageViewController alloc] init];
[self.navigationController pushViewController: pickImageViewController animated:true];
[pickImageViewController release];
2、利用UIViewController自身的presentModalViewController,进行跳转;调用dismissModalViewControllerAnimated方法可以返回。
PickImageViewController *pickImageViewController = [[PickImageViewController alloc] init];
[self presentModalViewController:pickImageViewController animated:YES];
//返回
[self dismissModalViewControllerAnimated:YES];