ios 面试题(1)


1. main()

{

    int a[5]={1,2,3,4,5};

    int *ptr=(int *)(&a+1);

   printf:("%d,%d",*(a+1),*(pty-1));

}

2.写一个NSString 类的实现

+(id)initWithCSting:(const char *)null TerminatedCStringencoding:(NSStringEncoding)enconding
{
    NSString *obj;
    obj=[self allocWithZone:NSDefaultMallocZone()];
    obj=[obj initWithCString:null encoding:enconding];
    @autoreleasepool {
        return  obj;
    }
}

3.objective-c有多重继承吗?不是的话有什么替代方法?

 答:cocoa中所有的类都是继承自NSObject ,多继承在这里是用协议(protocol)委托代理实现的。

4.object-C有私有方法吗,私有变量呢?

 答:object-C 类里面的方法只有两种,静态方法和实例方法.所有的实例变量默认都是私有的,所有的实例方法默认都是公有的

5.cons 意味着只读 下面的声明都是什么意思?

const int a ;   声明一个只读变量 a

int const a ;   声明一个只读变量a

const int *a;  声明一个只读属性的变量 变量不可修改 指针的地址可以修改

int *const a;  声明一个只读属性的指针 指针不可修改 指针指向的值可以修改

int const *a const;


6.extern "C" 的作用

(1)被extern“C” 限定的函数或变量 是exrern 类型的

 (2)被extern ”C“ 修饰的变量和函数是按照C语言方式编译和连接的


7.object-C 的优缺点

 优点:1.类别 2.posing 3.动态识别 4.指标计算 5.弹性讯息传递 6.不是一个过度复杂的C衍生语言 7.可与c/c++ 混合编程

缺点:1.不支持命名空间2.不支持运算符重载 3.不支持多继承 4.使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到

8.堆和栈的区别

 答:1.管理方式:对于栈来说,是由编译器自动管理,无需我们手工控制;对于堆来说释放工作由程序员控制,容易产生内存泄露。

 2。申请的大小,对于栈来说 在windows 下栈是向低地址扩展的数据结构是一块连续的内存区域。能存栈获得的空间较小

堆:堆是向高地址扩展的数据结构,是不连续的内存区域。堆获得的空间比较灵活也比较大

3.碎片问题:对于堆来说,频繁的new/delete 势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低对于栈来说,因为栈是先进后出的队列以至于永远不可能有一个内存块从中间溢出

4.分配方式:堆都是动态分配的栈有两种分配方式静态分配 和动态分配

5.分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持。堆则是c/c++ 函数库提供的,他的机制是很复杂的

9.swift 的新特性

 答 1.支持所有c和oc 的基本类型

      2.提供两种功能强劲的集合类型 array dictionary

      3.swift还支持一种新的高级类型元组

      4.可选类型

      5.支持闭包的特性

      6.支持脚本语言的特性,但能高效的编译运行

       7.类型安全的语言

10.线程和进程

     1.进程是具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的一个独立单位

     2.线程是进程的一个实体,是cpu调度和分配的基本单元,是比进程更小的能独立运行的基本单位,线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源,一个线程可以创建和撤销另一个线程

     3.线程和进程的关系:

       (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

         (2) 资源分配给进程,同一进程的所有线程,客共享该进程的所有资源

         (3)线程在执行过程中,需要协作同步。不同线程间要利用消息通信的办法实现同步。

         (4)真正在处理机上运行的是线程

         (5)线程是指进程内的一个可执行单元,也是进程内的可调度实体.

   4.线程和进程的区别

       (1)调度:线程作为调度和分配的基本单元,进程作为拥有资源的基本单位。

       (2)并发性:线程和进程都可以并发执行

       (3)拥有资源:进程是拥有资源的一个单位,线程不拥有系统资源,但可以访问隶属于进程的资源

       (4)创建或撤销进程的开销比较大,因为进程拥有独立的地址空间,在保护机制下进程异常不会造成程序奔溃,但是线程一旦死掉,进程就会死掉,多进程的程序比多线程的程序健壮性要好。

5.进程的同步机制

  答:原子操作就是不能被更高等级中断抢夺优先的操作。你既然提这个问题,我就说深一点。由于操作系统大部分时间处于开中断状态,所以,一个程序在执行的时候可能被优先级更高的线程中断。而有些操作是不能被中断的,不然会出现无法还原的后果,这时候,这些操作就需要原子操作。就是不能被中断的操作。

      信号量机制

     自旋锁:对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。

      分布式系统

6.进程死锁的原因

   答:资源竞争,进程推进顺序非法   

7.死锁的4个必要条件

   答:互斥、请求保持、不可剥夺、环路。

8.死锁的处理

  答:鸵鸟策略、预防策略、检测与解除死锁。

11.KVC,KVO

  答:键值编码是一种间接访问对象实例变量的机制,该机制可以不通过存取方法就可以访问对象的实例变量。

      键值观察 是一种能使得对象获得到其他对象属性变化的机制

      实现KVO键值观察模式,被观察的对象必须使用KVC键值编码来修改它的实例变量,这样才能被观察这观察到。因此,KVC是kVO 的基础,

12.深复制 浅复制

 13.定义属性时,什么时候使用assign、retain、copy、nonatomic

   1.assign:普通赋值,一般用于基本数据类型,常见委托设计模式,用来防止循环引用

   2.·retain,保留计数,获得对象的所有权,引用计数+1。

   3.copy  一般字符串使用copy foundation 中的不可变对象使用copy 效果相当于 retain

   4.nonatomic非原子性访问相比原子性(natomic)访问 可以提高效率。

14.strong 与weak  _unsafe  _Unretained与weak 的区别

  答:strong 叫强引用 ,weak 叫弱引用,在ARC 中 使用strong告诉编译器自动插入 retain weak 相当于手动管理内存的assign。在ARC 下代理协议也使用assgin。

        _unsafe unratined 与weak功能相似,区别在于当指向的对象销毁后,weak 会置为nil 防止调用野指针。

15.ARC 会存在内存泄露吗

     循环引用导致内存泄露。object-C对象与CoreFoundation 类之间桥接时 管理不当也会产生内存泄露。

17.事件响应者链

   View-》ViewController-》window -》 application-》丢弃事件

 18app 的生命周期

  • Not running:App没有启动。
  • Inactive:App在前台运行,但当前不接收操作事件(虽然它可能在执行某些代码)。这种状态通常只用于在不同状态切换时的过渡,一般停留时间较短,例外的情况是,在锁屏状态或系统提示用户响应某些事件(如接听电话或收到短信),可以长时间停留在该状态。
  • Active:App在前台运行,并且接收操作事件。
  • Background:App在后台运行,并且正在执行代码。大多数App在进入Suspended状态之前会进入该状态。停留在该状态的时间长短将视执行代码的时间而定。
  • Suspended:App在后台运行,但没有执行代码。在低内存情况下,系统将在不发出任何通知的情况下终止该App,以为前台App腾出更多的内存。

        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值