面试题: 1.怎样实现一个singleton(单例模式),请给出思路 要实现一个Singleton Class, 至少需要做以下四个步骤: 1. 为Singleton Object实现一个静态实例, 初始化, 然后设置成nil. 2. 实现一个实例构造方法(通常命名为 sharedInstance 或者 sharedManager)检查上面声名的静态实例是否为nil, 如果是则新建并返回一个本类实例. 3. 重写 allocWithZone: 方法来保证当其他人直接使用 alloc 和 init 试图获得一个新实例的时候不会产生一个新的实例. 4. 适当的实现 copyWithZone:, release, retain, retainCount 和 autorelease. @interface MySingleton : NSObject { // ... } + (MySingleton *)sharedInstance; // Interface - (NSString *)helloWorld; @end #import "MySingleton.h" static MySingleton *sharedInstance = nil; @implementation MySingleton #pragma mark Singleton methods + (MySingleton *)sharedInstance { @synchronized(self) { if (sharedInstance == nil) { sharedInstance = [[MySingleton alloc] init]; } } return sharedInstance; } + (id)allocWithZone:(NSZone *)zone { @synchronized(self) { if (sharedInstance == nil) { sharedInstance = [super allocWithZone:zone]; return sharedInstance; // assignment and return on first allocation } } return nil; // on subsequent allocation attempts return nil } - (id)copyWithZone:(NSZone *)zone { return self; } - (id)retain { return self; } - (unsigned)retainCount { return UINT_MAX; // denotes an object that cannot be released } - (void)release { //do nothing } - (id)autorelease { return self; } #pragma mark - #pragma mark NSObject methods - (id)init { if (self = [super init]) { // ... } return self; } - (void)dealloc { // ... [super dealloc]; } #pragma mark - #pragma mark Implementation - (NSString *)helloWorld { return @"Hello World!"; } @end 2.请简述错误消息处理机制 Object-C语言的异常处理符号和C++、JAVA相似。再加上使用NSException,NSError或者自定义的类,你可以在你的应用程序里添加强大的错误处理机制。 异常处理机制是由这个四个关键字支持的:@try,@catch,@thorw,@finally。当代码有可能出现异常时,我们把他放到@try语句块中。@catch()块包含了处理@try块里的抛出的异常的逻辑。无论异常是否发生,@finally块里面的语句都会执行。如果直接使用@throw块来抛出异常,这个异常本质上是一个OC的对象。咱们可以使用NSException对象,但是不局限于他们。 3.定义一个指针函数实现数组排序 Objective-C函数指针 2011-08-02 10:29:01 C/C++: typedef void (*CMDFUN)(SocketEngine * socket); Objective-C: IMP OnEnterHall = [self methodForSelector:@selector(OnEnterHall:)];//----This is the Point [eventLogin AddCmd:hchUserLogin fun:(CMDFUN)OnEnterHall]; [eventLogin AddCmd:hhcUserGetInfo fun:(CMDFUN)OnEnterHall]; - (void)OnEnterHall:(SocketEngine *)socket{ [AppDelegate sharedDelegate] performSelector:@selector(ServerConnected:) withObject:loadingView afterDelay:1.0f]; } 4.实现一个单链表的逆转 1. 声明一个Node类,成员:Node *next, Node *previous, id data; 2. 声明一个LinkedList类,成员:Node *head, Node *tail, bool reversed; 其中head是头指针,tail是尾指针,reversed是标识链表是否被逆序(YES为逆序,NO为顺序) 当reversed是YES的时候就从head开始遍历,NO就从tail开始遍历。 实现就自己写吧 @interface Node{ Node *next; Node *previous; id data; } @end @interface LinkedList{ Node *head; Node *tail; bool reversed; } -(bool) reverse; @end ...1:非ARC下使用block时,内存管理注意什么 注意循环引用 2。详细描述UITableViewCell的重用机制以及重用的作用 1-重取出来的cell是有可能已经捆绑过数据或者加过子视图的,所以,如果有必要,要清除数据(比如textlabel的text)和remove 掉add过 的子视图(使用tag)。 2-这样设计的目的是为了避免频繁的 alloc和delloc cell对象而已,没有多复杂。 3-设计的关键是实现cell和数据的完全分离
北京市 · 移动互联网 · 20-99人 · 成立12年 · 正在招聘
#滴滴出行#小桔充电#青菜拼车#小桔养车#滴滴外卖#滴滴驿站#滴滴研究院#滴滴企业版#团购网#充电桩#云服务器#社区团购平台#租车
公司全称
北京小桔科技有限公司
上下班时间
09:00-18:00
不加班
联系方式
13011227174
010-62682929
...更多
地址
北京市海淀区上地西路28号2号楼3层3层B307
简介
-