牛客网 iOS 题 107-126

### 牛客网 iOS 题 107-126

107.NSRunLoop 以下描述错误的是( )

  1. RunLoop 并不是由系统自动控制的
  2. 有三类对象可以被 RunLoop 监控:sources,timers,observers
  3. 线程是默认启动 RunLoop 的
  4. NSTimer 可手动添加到新建的 NSRunLoop 中

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

  1. RunLoop 的作用在于当有事情要做的时候它使当前的 thread 工作,没有事情做时又使 thread 休眠 sleep。RunLoop 并不是由系统自动控制的,尤其是对那些新建的次线程需要对其进行显示的控制。
  2. 每一个线程都有自己的 RunLoop,主线程是默认开启的,创建的子线程需要手动开启,因为 NSApplication 只启动 main application thread。
  3. NSTimer 默认添加到当前的 NSRunLoop 中,也可以手动制定添加到自己新建的 NSRunLoop 中

108.参考90题

109.参考22题

110.参考20题

111.下面关于线程管理错误的是( )

  1. GCD 在后端管理着一个线程池
  2. NSOperationQueue 是对 NSThread 的更高层封装
  3. NSThread 需要自己管理线程的生命周期
  4. GCD 可以根据不同优先级分配线程

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

NSOperationQueue 是对 GCD 的更高层封装

112.关于 Objective-C 中属性的说明,以下错误的是( )

  1. readwrite 是可读可写特性,需要生成 getter方法和 setter 方法
  2. readonly 是只读特性,只有 getter 方法,没有 setter 方法
  3. assign 是赋值属性,setter 方法将传入参数赋值给实例变量
  4. retain 表示持有特性,copy 属性表示拷贝属性,都会建立一个相同的对象

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

copy 是创建一个新对象,retain 是创建一个指针,引用对象计数加1

113.C 和 Objective-C 的混合使用,以下描述错误的是( )

  1. cpp 文件只能使用 C/C++ 代码
  2. cpp 文件 include 的头文件中,可以出现 Objective-C 代码
  3. mm 文件中混用 cpp 直接使用即可
  4. cpp 使用 Objective-C 的关键是使用接口,而不能直接使用代码

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

cpp 文件以及头文件都只能用 c/c++代码

114.delegate 中的 property 使用以下哪个属性( )

  1. assign
  2. retain
  3. copy
  4. strong

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

assign 防止循环引用

115.以下哪一段代码不会抛出异常( )

  1. NSArray *array = @[1, 2, 3]; NSNumber *number = array[3];
  2. NSDictionary *dict = @{@"key":nil};
  3. NSString *str = nil; NSString *str2 = [str substringFromIndex:3];
  4. NSString *str = @"hi"; NSString *str2 = [str substringFromIndex:3];

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

  1. OC 数组中的元素不能使基本数据类型,必须是对象,而且 array[3]下标越界;
  2. 字典中键值对不能为 nil,运行时崩溃
  3. OC 中向空对象发送消息,不执行任何操作,不报错,不崩溃
  4. 数组下标越界,运行时崩溃

116.参考题1

117. float x 与“零值”比较的 if 语句是?

  1. if(x == 0)
  2. if(x < 0.00001f)
  3. if(fabs(x) < 0.00001f) 或 if(Math.abs(x) < 0.00001f)
  4. if(x > -0.00001f)

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

float 和 double 都是有精度限制,应该用 |x-0| < err 来判断,这里 |x-0| 表示绝对值,err 表示限定误差。

118.一次鼠标单击会产生下列哪些事件( )

  1. onmousemove
  2. onmousedown
  3. onmouseup
  4. onclick
  5. onmouseover

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

119.UIView 的以下哪些属性是 Animatable 的:( )

  1. backgroundColor
  2. opaque
  3. transform
  4. contentStretch

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

opaque 是 BOOL 型变量。如果要调整透明度,应该是 alpha 属性。

120.[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopModebeforeDate:[NSDate distantFuture]];这段代码的作用是

  1. 设置当前线程的运行模式
  2. 暂停当前线程一段时间
  3. 在当前线程中进行一次消息轮询
  4. 设置当前线程的最大运行时间

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

进行一次消息轮询,监听线程是否有消息输入(default 模式),有就线程开始工作,没有就休眠。

121.下面的定义中,错误的个数为:( )

NSString a[] = {@"abc", @"def"};
NSArray *a = @[@"abc", @"def"];
NSArray *a = [NSArray arrayWithObjects:@"abc", @"def"];
NSArray *a = [NSMutableArray arrayWithArray:@[@"abc"]];

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

NSString *a[] = {@"abc", @"def"};
NSArray *a = [NSArray arrayWithObjects:@"abc", @"def", nil];

122.应用申明一下哪些权限可以被系统授予后台运行的权限?

  1. 视频播放应用
  2. 音乐播放应用
  3. 地理位置应用
  4. VoIP 应用
  5. 杂志新闻类需要更新内容的应用

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

123.以下代码欲在 NSOperation 子线程中异步请求网络数据,请在注释处写上一段代码以满足要求。finished_代表异步请求结束的标志变量。请选出有用的选项:

- (void) start {
    if (![self isCancelled]) {
        connection_ = [[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:download_url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15] delegate:self];
       if (connection_ != nil) {
            executing_ = YES;
       } else {
            finished_ = YES;
       }
       while (!finished_) {
            // 代码放入此处
       }
    }
    else {
        finished_ = YES;
    }
}
  1. [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
  2. [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithinterval:0.1]];
  3. [[NSThread currentThread]waitForTimeinterval:0.1];
  4. [NSThread sleepForTimeinterval:0.1];

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

只有主线程的NSRunLoop会默认启动,自己新起的线程,要自己手动调用RunLoop。
这里新起了一个线程,调用NSURLConnection的异步方法,如果不设置RunLoop,则NSURLConnection的delegate函数不会被运行,因为线程已经结束。在NSURLConnection的delegate方法中去设置finished_变量为YES,线程才会退出while循环而结束。

124.在定义属性时,下面哪些数据类型可以使用 retain 和 copy:

  1. NSArray
  2. float
  3. int
  4. NSString
  5. NSNumber
  6. NSInteger

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

copy 是在数据类型声明时,选择遵守 NSCopying 协议的才可以使用
9大基本类型不能使用 retain
NSInteger = long

125.C++/Java/Objective-C/C# 是如何体现面对对象思想的?

继承、封装、多态 ?

126.iOS 系统提供了哪些手势?选择一个自己写代码实现

  1. UITapGestureRecognizer敲击手势(单击和双击)
  2. UIPanGestureRecognizer(拖动手势)
  3. UIPinchGestureRecognizer(缩放手势)
  4. UISwipeGestureRecognizer(擦碰手势)
  5. UIRotationGestureRecognizer(旋转手势)
  6. UILongPressGestureRecognizer(长按手势)
UIView *gestureView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 300, 300)];
    gestureView.backgroundColor = [UIColor blackColor];
    [self.view addSubview:gestureView];
    
    /*---------------点击手势-------------*/
    
    UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc ] initWithTarget : self action : @selector (tap1Action:)];
    //注意:一个点击手势,只能识别一种手势,单击和双击是不同的两个手势
    //设置点击的数量
    tap1.numberOfTapsRequired = 1 ;
    //设置点击的个数
    tap1.numberOfTouchesRequired = 1 ;
    //往gestureView上添加一个手势
    [gestureView addGestureRecognizer:tap1];
    
    UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc ] initWithTarget : self action : @selector (tap2Action:)];
    tap2.numberOfTapsRequired = 2 ;
    [gestureView addGestureRecognizer:tap2];
    
    //如果参数中的手势出发了,则自身失效
    [tap1 requireGestureRecognizerToFail:tap2];
    
    
    /*---------------轻扫手势-------------*/
    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc ] initWithTarget : self action : @selector (swipe:)];
    // 设置方向---向上轻扫
    swipeGesture. direction = UISwipeGestureRecognizerDirectionUp;
    [gestureView addGestureRecognizer:swipeGesture];
    
    
    /*---------------平移手势-------------*/
    // 平移手势(滑动)
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc ] initWithTarget : self action : @selector (panAction:)];
    [gestureView addGestureRecognizer:panGesture];
    
    
    /*---------------长按手势-------------*/
    // 长按手势
    UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc ] initWithTarget : self action : @selector (longPress:)];
    //设置长安的最短时间
    longPressGesture.minimumPressDuration = 3;
    [gestureView addGestureRecognizer:longPressGesture];
    
    /*---------------旋转手势-------------*/
    // 旋转手势
    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc ] initWithTarget : self action : @selector (rotation:)];
    [gestureView addGestureRecognizer:rotationGesture];
    
    /*----------捏合手势--------------*/
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc ] initWithTarget : self action : @selector (pinchAction:)];
    [gestureView addGestureRecognizer:pinch];
}

//单击
- (void)tap1Action:(UITapGestureRecognizer *)tap1
{
    NSLog(@" 单击 ");
}

//双击
- (void)tap2Action:(UITapGestureRecognizer *)tap2
{
    NSLog(@" 双击 ");
}

//轻扫
- ( void )swipe:(UISwipeGestureRecognizer *)swipe
{
    if (swipe. direction == UISwipeGestureRecognizerDirectionUp) {
        NSLog(@" 向上清扫 ");
    }
}

//平移
- ( void )panAction:(UIPanGestureRecognizer *)pan
{
    CGPoint p = [pan locationInView:pan.view];
    NSLog( @"%@" , NSStringFromCGPoint(p));
}

//长按
- ( void )longPress:(UILongPressGestureRecognizer *)longPress
{
    if (longPress. state == UIGestureRecognizerStateBegan) {
        NSLog(@" 开始长按 ");
    } else if (longPress. state == UIGestureRecognizerStateEnded) {
        NSLog(@" 结束长按 ");
    }
}

//旋转
- ( void )rotation:(UIRotationGestureRecognizer *)rotation
{
    //获取旋转角度---弧度
    CGFloat r = rotation.rotation;
    
    //弧度转角度
    //180/Pi = x/r
    NSLog(@"r is %.2f", 180 / M_PI * r);
}


//捏合
- (void)pinchAction:(UIPinchGestureRecognizer *)pinch
{
    //获得捏合的比例
    CGFloat scale = pinch.scale;
    
//    pinch.view.transform = CGAffineTransformScale(pinch.view.transform, scale, scale);
    pinch.view.transform = CGAffineTransformMakeScale(scale, scale);
    
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,248评论 8 265
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,107评论 29 470
  • 1、请看下面一段代码,请问访问a,b,c 3种类型变量的效率从高到低依次是 (B) A. cbaB. abcC. ...
    AlanGe阅读 4,775评论 0 7
  • 说来惭愧,9.4我没有坚守,也就是被割了韭菜。作为一个小投资者,三十多万放在交易平台,眼看着国家负面消息不断,真心...
    宇风_3c96阅读 260评论 0 0
  • 本人资料 王佳,女,86年,双鱼座,高中教师,休产假中,辽宁沈阳人,隶属于沈阳趁早读书会。 微博:小辰妈的幸福生活...
    9f450160aee6阅读 252评论 2 2