zoukankan      html  css  js  c++  java
  • iOS-面试相关<一>

    因为公司招人的原因,导致自己不得不去面试别人,自己做开发也快三年了,但是相关基础的概念、原理有点忘记了,记得也不是很系统

    在这里总结下吧,免得面试别人翻车了哈哈

    1、属性修饰词

      一、readOnly,readWrite

      答:readonly根据字面意思,只读属性,只生成了getter方法,如果调用setter方法程序会Cash。但是事实是这样嘛?只读属性真的不能赋值吗,其实可以通过KVC去修改其键值。readWrite,默认可读可写,没啥说的。

      PS:self.和_的区别,self.就是调用property自动生成的getter和setter方法,而_则是直接去调用实例变量(property会自动生成一个实例变量,如果你重写了getter与setter方法,property自动生成的实例变量就无效了,需要手动去申明一个实例变量或者用@@synthesize)。

      二、atomic,nonatomic

      答:atomic 默认的属性修饰词,非线程安全,只能保证取到值,不能保证该值在取的时候不会被修改。

        nonatomic 非原子修饰,访问速度更快,几乎所有属性都用这个修饰,线程安全通过信号量、NSLock来实现等。

      三、assign、weak、strong

      答:assign: 一般用于修饰基本数据类型,原因:assign修饰的对象引用计数不会加一,意味着它会被立即释放,并且不会自动置为nil,还保留这对象的指针地址。

        weak: 必须用于修饰对象,和assign的区别是会被立即释放并且会被置为nil。一般用于修饰代理和需要用完就被自动释放的临时对象。

        strong:被修饰的对象引用计数会加一,强引用。

      四、copy、mutableCopy、strong

      答:先说下深浅拷贝,

        深拷贝:对象拷贝,重新申请一片内存来保留该对象。

        浅拷贝:指针拷贝,相当于引用计数加一,引用的是同一个对象。

        一般来说,copy是浅拷贝,mutableCopy是深拷贝,但是细讲的话又可以更详细点:可变字符串或者数组在copy后会发生深拷贝,变成不可变的对象。

        mutableCopy一定是深拷贝,拷贝后一定是可变字符串或者数组,即使传入的是不可变的对象。

        为什么NSString要用copy修饰?使用copy修饰后,即使拷贝属性来自可变字符串,也会被深拷贝变成不可变字符串,也就是源字符串修改之后不会影响到属性字符串,增强了代码的健壮性。

  • 相关阅读:
    生活中总结出来的各种定律
    python中os.system()的返回值
    使用ldap登录服务器
    使用VirtualBox + Vagrant打造统一的开发环境
    Laravel 虚拟开发环境 Homestead
    win7 powershell版本过低问题
    Vagrant安装教程及常见问题
    vagrant up提示“Couldn‘t open file /path/to/base“的错误解决方法
    一起谈.NET技术,ASP.NET MVC的全球化方案 狼人:
    一起谈.NET技术,.Net4.0 Parallel编程(二)Data Parallelism 中 狼人:
  • 原文地址:https://www.cnblogs.com/qiyiyifan/p/13652899.html
Copyright © 2011-2022 走看看