牛客网 iOS 题 90-106

作者: iOS佥 | 来源:发表于2018-05-12 11:05 被阅读5次

    牛客网 iOS 题 90-106

    90.iOS 中持久化方式有哪些?

    1. 属性列表文件
    2. 对象归档
    3. SQLite 数据库
    4. CoreData

    答案:<font color=“LightYellow”>1,2,3,4</font>

    1.属性列表文件:即 NSUserDefault 存储,实际是本地生成一个 plist 文件,将所需属性存储在 plist 文件中
    2.对象归档:本地创建文件并写入数据,文件类型不限
    3.SQLite 数据库:本地创建数据库文件,进行数据处理
    4.CoreData:同数据库处理思想相同,但实现方式不同

    91.NSURLConnection 类的同步请求方法是?

    1. + sendSynchronousRequest: returningResponse: error:
    2. - initWithRequest: delegate:
    3. - initWithRequest: delegate: startImmediately:

    答案:<font color=“LightYellow”>1</font>

    2 和 3 都是异步方法,需要设置 delegate 属性

    92.NSURLConnectionDelegate 协议中的方法有哪些?

    1. connection: didReceiveData:
    2. connection: didFailWithData:
    3. initWithRequest: delegate:
    4. connectionDidFinishLoading:

    答案:<font color=“LightYellow”>1,2,4</font>

    2 属于 NSURLConnectionDelegate
    1,4属于 NSURLConnectionDataDelegate
    而 NSURLConnectionDataDelegate 的声明:@protocol NSURLConnectionDataDelegate <NSURLConnectionDelegate>

    93.单例类 NSNotificationCenter 提供信息广播通知,它采用的是观察者模式的通知机制。

    答案:<font color=“LightYellow”>1</font>

    94.NSAssert 类似的宏有哪些?

    1. NSAssert1
    2. NSAssert2
    3. NSAssert3
    4. NSAssert4

    答案:<font color=“LightYellow”>1,2,3,4</font>

    根据 API 有:NSAssert,NSAssert1,NSAssert2,NSAssert3,NSAssert4,NSAssert5

    95.iOS 单元测试框架有哪些?

    1. OCUnit
    2. GHUnit
    3. OCMock
    4. NSXML

    答案:<font color=“LightYellow”>1,2,3</font>

    • OCUnit 是 OC 官方测试框架,现在被 XCTest 所取代
    • GHUNit 和 OCMock 都是第三方的测试框架
    • NSXML 不属于框架,是 Foundation 框架中的一个类,用于解析 xml 数据

    96.NSXMLParser 构造方法有哪些?

    1. initWithContentsOfURL
    2. initWithData
    3. initWithStream
    4. initWithContentsOfFile

    答案:<font color=“LightYellow”>1,2,3</font>

    本地 xml 文件的解析必须转化成 NSData 才行

    97.判断是否为 iPad 设备语句是?

    1. if([[UIDevice currentDevice] userInterFaceIdiom] == UIUserInterfaceIdiomPhone){...}
    2. if([[UIDevice currentDevice] userInterFaceIdiom] != UIUserInterfaceIdiomPhone){...}
    3. if([[UIDevice currentDevice] userInterFaceIdiom] == UIUserInterfaceIdiomPad){...}

    答案:<font color=“LightYellow”>3</font>

    • UIUserInterfaceIdiomUnspecified = -1
    • UIUserInterfaceIdiomPhone //iPhone and iPod touch style UI
    • UIUserInterfaceIdiomPad //iPad style UI

    98.UIPopoverController 控制器的常用方法和属性?

    1. presentPopoverFromBarButtonItem: permittedArrowDirection:animated: 呈现 Popover 视图方法
    2. dismissPopoverAnimated: 关闭 Popover 视图方法
    3. PopoverVisible 判断 Popover 视图是否可见
    4. popoverArrowDirection 判断 Popover 视图箭头的方向

    答案:<font color=“LightYellow”>1,2,3,4</font>

    这个类在9.0后被 Deprecated 了

    99.UISplitViewController 控制器可以呈现屏幕分栏视图的效果,MasterView 占有320点固定大小。

    答案:<font color=“LightYellow”>2</font>

    从8.0开始,splitViewController 可以在iPhone 中使用,MasterView 的宽度是整个屏幕的宽度,所以不是固定的320.

    100.模态视图专用属性有哪些?

    1. UIModalPresentationFullScreen,全屏状态,是默认呈现样式,iPhone 只能全屏呈现
    2. UIModalPresentationPageSheet,它的宽度是固定的768点,在 iPad 竖屏情况下则全屏呈现
    3. UIModalPresentationFormSheet,它是固定的540x620点,无论是横屏还是竖屏情况下呈现尺寸都不会变化
    4. UIModalPresentationCurrentContext,它与父视图控制器有相同的呈现方式

    答案:<font color=“LightYellow”>1,2,3,4</font>

    101.NSXML 框架中核心的是 NSXMLParser 和它的委托协议 NSXMLParserDelegate,NSXMLParserDelegate 常用方法有哪些?

    1. parserDidStartDocument
    2. parser:foundCharacters
    3. parser:didStartElement:namespaceURL:qualifiedName:attributes
    4. parser:didEndElement:nameSpaceURL:qualifiedName
    5. parserDidEndDocument

    答案:<font color=“LightYellow”>1,2,3,4,5</font>

    102.网页错误,跳转到 题22

    103.用 Objective-C 定义并实现一个基于数组的循环队列,当队列放满需支持动态的拓展队列长度

    LoopQueue.h:

    #import <Foundation/Foundation.h>
    
    @interface LoopQueue:NSObject
    - (instancetype)initWithItem:(NSObject *)item andCapacity:(NSUInteger)capacity;
    - (instancetype)init;
    - (void)enqueue:(NSObject *)item;   // 进队
    - (NSObject *)dequeue;              // 出队
    @end
    
    

    LoopQueue.m:

    #import "LoopQueue.h"
    
    #define DEFAULT_SIZE 10
    
    @interface LoopQueue ()
    @property ( nonatomic ) int first;
    @property ( nonatomic ) int last;
    @property ( nonatomic ) NSUInteger capacity;
    @property ( nonatomic ) NSMutableArray *elementData;
    @end
    
    @implementation LoopQueue
    -( instancetype )initWithItem:( NSObject *)item andCapcity:( NSUInteger )cap
    {
        self.first = - 1 ;
        self.last = - 1 ;
        self.capacity = cap;
        self.elementData = [ NSMutableArray arrayWithCapacity:cap];
        if (item == nil ) {
            return self ;
        }
        [ self.elementData addObject:item];
        return self ;
    }
    -( instancetype )init
    {
        self = [[ LoopQueue alloc ] initWithItem: nil andCapcity: DEFAULT_SIZE ];
        return self ;
    }
    -( BOOL )isFull
    {
        return ( _first == 0 && _last == _capacity - 1 ) || _first == _last + 1 ;
    }
    -( BOOL )isEmpty
    {
        return self.first == - 1 ;
    }
    -( void )enqueue:( NSObject *)item
    {
        if (![ self isFull ]) {
            if ( _last == _capacity - 1 || _last == - 1 ) {
                self.elementData [ 0 ] = item;
                _last = 0 ;
                if ( _first == - 1 ){
                    _first = 0 ;
                }
            } else {
                self.elementData [++ _last ] = item;
            }
        } else {
            self.capacity ++;
            self.last ++;
            [ self.elementData addObject:item];
            
        }
    }
    -( NSObject *)dequeue
    {
        if (![ self isEmpty ]) {
            NSObject *tmp = self.elementData [ _first ];
            if ( _first == _last ){
                _last = _first = - 1 ;
            } else if ( _first == _capacity - 1 ){
                _first = 0 ;
            } else {
                _first ++;
            }
            return tmp;
        } else {
            NSLog ( @"Fail:Queue is Empty" );
            return nil ;
        }
    }
    
    

    104.为 UIImageView 添加一个简易的显示远程图片的方法

    - (void) setImageWithURL:(NSURL *)url holderImage:(UIImage *)holderImage
    图片小于200kb,不用考虑多个 UIImageView 对象的情况

    答案:通过 category 给 UIImageView 添加这个个方法,代码如下

    - (void) setImageWithURL:(NSURL *)url holderImage:(UIImage *)holderImage {
       NSData *data = [NSData dataWithContentsOfURL:url];
        if (data) {
            holderImage = [UIImage imageWithData:data];
        }
    }
    

    105.UITableView 需要实现哪些代理?列出 UITableView 代理中必须实现的与其他一些常用的函数。

    答案:需要实现的代理有两个

    • UITableViewDelegate
    • UITableViewDataSource

    必须实现的方法两个:

    • cellForRowAtIndexpath
    • numberOfRowsInSection

    查看源代码,@required 是必须要实现的,@optional 是选择实现的

    106.小明写了一个基于 TCP 协议的 iOS 聊天工具,随着用户的增多,聊天的过程中不时出现卡顿,程序失去响应的问题,请帮忙分析小明的程序可能出现了什么问题?如果你是小明的话,如何设计程序结构,保证网络的延迟问题不会影响用户的 UI 操作。

    • 原因分析:网络延时造成程序阻塞,进程在等待网络响应时间过长,出现卡顿现象
    • 改进办法:采用多线程,负责网络的通信任务交给一个专门的后台进程处理

    相关文章

      网友评论

        本文标题:牛客网 iOS 题 90-106

        本文链接:https://www.haomeiwen.com/subject/mcvcdftx.html