iOS部分笔试题及答案

IOS笔试题
面试题网址http://www.mianwww.com/html/category/it-interview/mobile

  1. 属性readwrite、readonly、assign、retain、copy、nonatomic各是什么作用,在那种情况下用?
    assign用于简单数据类型,如NSInteger,double,bool,retain和copy用于对象,
    readwrite是可读可写特性;需要生成getter方法和setter方法时;
    readonly是只读特性 只会生成getter方法 不会生成setter方法 ;
    不希望属性在类外改变assign是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;
    retain表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;copy表示赋值特性,setter方法将传入对象复制一份;需要完全一份新的变量时。nonatomic非原子操作,决定编译器生成的setter getter是否是原子操作,
    atomic表示多线程安全,一般使用nonatomic

  2. Object -C 中创建线程的方法时什么?如果在主线程中执行代码,方法时什么?如果想延迟执行代码,方法又是什么?Phread、NSThread、GCD、NSOperation回到主线程的方法:
    方法一:

     dispatch_async(dispatch_get_main_queue(), ^{           …..        });   
    

方法二:

    [self performSelectorOnMainThread:  withObject:image waitUntilDone:YES];

延迟执行的方法: //延迟加载 3秒后执行show方法
方法一:performSelector方法

      //[self performSelector:@selector(show) withObject:nil afterDelay:3];  

方法二:定时器

  //[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(show) userInfo:nil repeats:NO];    

方法三:sleep

    //    [NSThread sleepForTimeInterval:3];
    //    [self show];  

方法四:GCD

     dispatch_time    double delayInSeconds = 3.0;    __block ViewController* bself = self;    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,(int64_t)(delayInSeconds * NSEC_PER_SEC));    dispatch_after(popTime, dispatch_get_main_queue(), ^{        [bself show];    });
  1. #import跟#include有什么区别,@class呢?

#import能避免头文件被重复包含的问题:
  1. C/C++中包含头文件时用#include。( 使用include要注意重复引用的问题:解决办法#ifndef/#define/#endif)
  2. #import 确定一个文件只能被导入一次,避免了重复引的问题,在OC中我们基本用的都是 import。 #import< > 包含iOS框架类库的类, #import""包含项目中自定义的类。@class通知编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑
  1. Object C中书写一个单例模式,使用GDB写单例?
    //方法一:

    static SingletonPattern* _singletonPatternByNormal;+(id)sharedSingletonPatternByNormal{    if(!_singletonPatternByNormal)    {        _singletonPatternByNormal=[[SingletonPattern alloc]init];    }    return _singletonPatternByNormal;}
    

//方法二://使用GCD dispatch_once
//适用场景:多线程安全

    static SingletonPattern* _singletonPatternByGCD;
    +(id)sharedSingletonPatternByGCD{    
    static dispatch_once_t onceToken;   
     dispatch_once(&onceToken, ^{       
      _singletonPatternByGCD =[[SingletonPattern alloc]init];    
      });   
       return _singletonPatternByGCD;}
  1. 说明week和__week的作用及常用在什么时候?
    week 一般是在属性的声明中 在@propert后面使用
    __week 一般是在对象的声明中使用

    @property (weak, nonatomic) IBOutlet UIImageView *ImageView;__weak TRPoint *p1 = nil;//__weak将指针p1定义为弱引用
    

当弱引用指向一个强引用所持有的对象时,当强引用将对象释放掉后,弱引用会自动的被赋值为ni

  1. 书写一个block、并简单描述block ?

    int (^block2)(int ,int)=^(int nAdd1,int nAdd2){    
     NSLog(@"有参数有返回值的block被执行");    
      return nAdd1+nAdd2;
    };
    
  2. Object C
    中多线程有几种实现方式,都有什么?

  3. 简述Objective-C内存管理MRC与ARC的关系及其区别?
    MRC 手都内存管理;ARC是自动内存管理。
    当我们使用alloc,retain,new,copy或者mutableCopy的时候,引用计数+1,当我们使用release的使用,引用计数-1,当引用计数为0的时候,这个对象才会被彻底销毁,对象在销毁之前系统会自动的调用dealloc方法,在dealloc方法里面,如果这个对象还持有其他对的指针,那么需要先对这些指针进行release,再调用[super dealloc];

  4. IOS中持久化方式有哪些?
    NSUserDefaults、plist、Archiving:归档、SQLite3和Core Data

  5. 通知和代理的区别?
    观察者模式:一个对象(A)想知道另一个对象(B)的状态是否发生了变化,A对象随B对象状态的改变而改变的过程,可以用观察的过程来控制,这种两个对象保持状态改变的一致的模式,叫做观察者模式
    ------共同点 利用通知和代理都能完成对象间的通信。(比如A对象告诉D对象发生了什么事情,A对象传递数据给D对象)
    ------不同点 代理:只能是一对一的关系(一个对象只能告诉另外一个对象发生了什么事情)通知:多对多关系(一个对象能告诉N个对象发生了什么事情,一个对象能得知N个对象发生了什么事情)

补充题目。MRC中Setter方法的实现setter方法的实现

-(void)setCar:(Car *)car {  
   if(_car!=car)   {
    [_car release];//对旧对象release一次  
    _car = [car retain];//对新对象retain一次}
}

1.Objective-C有多重继承吗?不是的话有什么代替方法?
没有多重继承( )多继承在这里是用protocol 委托代理 来实现的

2.简述#import跟#include的区别,@class呢?

#import和#include区别在与防止重复加载头文件
#import和@class @class 一般出现在头文件(.h)中。#import用于.m中。

例如A->B ,B->A.相互依赖时import会报错

3.简述线程与进程的区别和联系?
进程和线程都是操作系统中程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。差别在与不同的操作系统资源管理方式。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程知识一个进程中的不同执行路径。
线程有自己的堆栈和局部变量,但线程之间没有独立的地址空间,一个线程死掉就等于整个线程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

4.简述readwrite,readonly,assign,retain,copy,nonatomic属性的作用?
readwrite 是可读可写特性;
需要生成getter方法和setter方法时readonly 只读属性,只有getterassign 是赋值特性,setter方法将传入参数赋值给实例变量;
仅设置变量时;retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;
copy 表示拷贝特性,setter方法将传入对象复制一份;
需要完全一份新的变量时。nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic

5.你在开发项目时,用到了哪些数据存储方式,iPhone中常见的方式有哪些,各有什么区别?
NSUserDefault (偏好设置) plist (属性列表) Archiving (归档) SQList Core Data

  1. 定义属性时,什么情况使用copy,assign和retain?
    当我们需要获得一份全新的数据时采用copy;assign 设置变量参数时使用;retain

7.autorelease的对象是在什么时候被release的?
只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才做引用计数减一

8.对于C++/OC来说,类(class)与结构(struct)有什么区别?
class是引用类型,struct是值类型。引用类型a2值改变a1 也改变值类型a1付给a2开辟一块新的空间,a2改变a1不会随着改变。

9.内存的分配方式有哪几种?请简述。
1从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
2、在栈上创建。3、从堆上分配

10.冒泡排序
排序int num[ ] = {2,3,6,4,8,7}

int = i, j;
for(i = 0; i < num.count; i++ ) {   
  for (j = 0; j < num.count - i -1; j++ ) {         
 if( num[j]>num[j+1]) {           
int temp = num[j];              
   num[j] = num[ j+1 ];              
   num[j+1] = temp;        
  }   
  }}

11.什么是代理(delegate),什么是协议(protocol)?两者有什么关系吗?
delegate它本身是一个设计模式,它的意思是委托别人去做某事。protocol协议就是要做的事。

12.根据你的理解,手工写出下面属性定义的setter方法。

    @property(nonatomic,retain)NSString*name;-(void)setName:(NSString *)str {      [str retain];     [name release];4     name = str;}

13.简述retain和copy的区别对象指向的还是原来的地址 引用计数器+1copy 将对象拷贝一份,完全新的简述ios的内存管理机制?自动内存计数 系统手动内存计数 程序员自己回收 谁创建谁销毁 简述你对 retain,copy,assign,strong,weak属性的理解?
retain:用于指针变量。就是说你定义了一个变量
assign: 用于非指针变量。用于基础数据类型
copy :它指出,在赋值时使用传入值的一份拷贝
strong:强引用,引用计数器加一,对象释放时减一
weak: 弱引用,不会加一减一

dealloc,release,autorelease的区别是什么?简述他们是如何工作的?
release是引用计数器减一dealloc是引用计数器为0时调用销毁对象Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。 autorelease pool来避免频繁申请/释放内存(就是pool的作用了)。

简述一下delegate ,KVO,NSNotification的作用和区别? 解释一下什么是Lazy Loading?
懒加载,当要使用这个对象时调用,不使用就不会调用。节省内存。当加载大文件时就不建议使用,以空间换时间。

为什么说Objective-C是动态运行时语言? 简述IOS实现多线程有几种方式?多线程之间如何通讯?
GCD ,NSOperation,NSThread,PThread分为同步异步

你经常使用类NSObject的哪些方法?RunLoop是什么,在iOS中起到什麽作用? 为什么很多内置类如UITableViewControl的delegate属性都是assign而不retain?防止重复加载请问下面这段代码有什么问题?

(void)setAge:(int)newAge { Self.age=newAge; }

进入循环 self.age 会自动触发setter方法_age = newAge;

请使用OC编写Singleton设计模式的实现。

@interface Singleton : NSObject
    + (id)shardSingleton; 
@end 
static Singleton *_singleton = nil;
+ (id)shardSingleton {   
    if(!_singleton) {      
    _singleton = [[Singleton alloc] init];    
 }  
      return _singleton;
}
面试题.png

1.可变 数组用 copy会怎么样?
copy是深拷贝,又称为值拷贝,用copy修饰的可变数组 array会变成不可变
字符串 用strong会怎么样?
strong是浅拷贝,又称为指针拷贝,修饰的全局NSString类型,但在局部创建NSMutableString时
例如NSMutableString * str = 【NSMutableString stringWhitFomt:“456”】;
让string = str; 当NSMutableString的str改变时, strong修饰的NSString也跟着改变
用的同一个内存

2.oc-js 直接用原生的
js -> oc
先搭建一个桥梁stringByEvaluatingJavaScripFromString
shouldStarloadwiht什么来着我忘了
js调用oc方法,可以通过data 给oc传值

3.用charler抓包 用postMan模拟请求,
用wkwebview替代uiwebview,u或者在webviewDidFinishload中
加上[NSUserDefaules standerdUserDefaules]setInteger:0 forkey:“WebkitCacheModlePe..."]
请求方法URI协议/版本
请求头(Request Header)
请求正文

4.block 传值很方便,block适合两个控制器直接的关系,代理适合多个控制器传值传方法,遵从协议实现协议方法

5.通知和kvo的区别
通知需要 被观察者 先主动发送通知,然后观察者注册监听后才会做出响应。不过不仅可以监听属性的变化,还有方法,
kvo 在观察者里实现,是谁监听谁注册,被观察者只需要allobserver 来添加观察。然后不需要写任何代码, 观察者自己来实现 代理方法即可,

6.performSelector 延迟方法,只能在主线程中使用,
因为在主线程中 当事件开始的时候 runloop回创建一个timer ,而子线程不会创建 所以无法执行performSelector 的延迟方法,就是不能再异步中执行。
dispach_time可以 在异步中执行 ,使用dispach——after..

7.数据缓存方面的经验?
归档 NSUserDefaules sqlits FMDB NSURLCache

8.block循环引用,在block中用set方法调用全局变量 比如 self.name 会让name的引用计数计数+1,只要__weak把self重新引用一下就行了

9.类别,类别的作用 1: 将类的实现分散不同的类或者框架中
2: 将类的私有方法的优先级提高
3.创建协议
类别通常用来添加方法,添加属性的话 需要用到 runtime 在类别中重写set和get方法
【只能扩展类的方法,不能扩展类的属性】
10。例如 边里第三方SDK的私有API啦 用class_Ivar动态添加成员变量啦

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

推荐阅读更多精彩内容