zoukankan      html  css  js  c++  java
  • IOS面试题--001

    1、        简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwritereadonlyassignretaincopynonatomicatomicstrongweak属性的作用?

     

    Release -----,alloc 开辟空间 deaclloc销毁空间 .手动调用dealloc的时候会强制将引用计数置为0

     

    readwrite,可读可写,让系统生成settergetter   readonly,只可读,只生成getter

     

    assign引用计数不会+1,适用于基本数据类型.常用于指向储存于静态区的变量以及delegate,直接赋值

     

    retain引用计数+1,获得对象的所有权

     

    copy 复制一个对象,并且储存在不同的内存区.原对象的引用计数不变.遵循NSCoping协议的可以深拷贝

     

    Nonatomic非原子性的,不保证多线程下保护安全 atomic原子性,保证多线程下安全.有一个属性需要多个线程同时访问一个变量,使用atomic能够自动加锁解锁.

     

    Strong,用于ARC模式下,表明对象属于强引用.类似于retain,但是比retain更加安全,只要对象存在拥有者,就可以引用,不会被释放.只要对象失去了拥有者,立即被抛弃.不必再将已经指向已经释放的对象的指针指向空.避免了野指针.

     

    Weak类似assign,弱引用.应用计数不会增加.释放指针自动置为nil;

     

     

     

    2、        类变量的@protected,@private,@public,@package,声明各有什么含义?

    通过->的方式访问成员变量

    @protected受保护的.该类和所有子类中的方法可以直接访问这样的变量。

    @private 变量是私有的,该类的方法可以直接访问变量。

    @public 所有类都可以访问

    @package 表示框架内访问,外部无法访问

     

     

    3、        线程是什么?进程是什么?二者有什么区别和联系?

    线程,是进程的一个具体实例.程序运行的最小单位,是被系统独立调度和CPU的基本运行单元.

    进程是操作系统中可以并行工作的基本单元,

    一个应用程序有一个进程,一个进程中至少有一个线程.

     

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

     

     

    4、        谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?

    在一个进程中有多个线程共同存在,每个线程执行各自的任务,相互之间不会干扰,一个线程可以创建或者撤销其他的线程.让一个进程可以同时执行很多任务.这就减少了等待时间,提高了进程的运行效率.但是多线程会耗费资源,并且由于一个线程死掉会造成整个进程死掉.多线程也容易造成安全性问题.

     

    Thread

     

    使用GCD

     

    使用NSOperationQueue

     

    POSX

     

    异步方法

     

    5、        线程同步和异步的区别?IOS中如何实现多线程的同步?

    线程同步是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低 ,串行执行任务  线程异步:访问资源时在空闲等待时同时访问其他资源,实现多线程机制,并行执行任务

     

    使用GCD的主队列.使用NSOperationQueue,把最大线程数设为1

    GCD使用障碍

    6、        假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符,即上述字符串处理之后的输出结果为:aabcd

     

     

     

     

    7、        获取一台设备唯一标识的方法有哪些?

    UDID

    OPENUDID

    广告标识符

    Vindor标识符

    推送token+bundle_id

    UUID

     

    8、        ios类是否可以多继承?如果没有,那可以用其他方法实现吗?简述实现过程。

    没有.通过协议可以调用.

     

     

     

    9、        堆和栈的区别?

    :由编译器自动分配释放,存放函数的参数值,局部变量的值等

    :一般由程序员分配释放,若程序员不释放,程序结束时可能由系统回收

     

    10、     ios本地数据存储都有哪几种方式?

    plist

    数据库

    归档和反归档

    文件读写

     


  • 相关阅读:
    git track
    npm 升级到最新版本
    三行代码实现垂直居中和cube
    布局之定位
    MongoDB的安装问题
    正则表达式
    javascript表单验证
    Oracle中创建表,行级触发器,序列
    查找某个字符在字符串中出现的次数
    oracle表中有一列id她是自动增长的,插入一条数据时怎么取得id的值
  • 原文地址:https://www.cnblogs.com/xukunhenwuliao/p/3576191.html
Copyright © 2011-2022 走看看