• iOS面试知识点


    iOS面试知识点

    (1)Java垃圾回收机制和ARC回收机制的区别?
    ARC自动引用计数(automatic reference counting),当你在编译程序时提供自动管理内存的功能,
    它会为程序自动加入内存的控制代码,控制独享声明周期。这样一来,就可以简化内存管理步骤。
    不过支持的版本是在iOS4,iOS5以上。【注意创建项目的时候,勾选ARC功能】

    与Java语言相同Objective-c 2.0之后,也提供了垃圾回收机制。但是在iOS移动终端设备中,并不
    支持垃圾回收机制。因此,iPhone并不能对内存进行自动垃圾回收处理(autorelease)。因此需要注意
    垃圾回收机制并不是ARC,ARC也是需要管理内存的,只不过是隐式的管理内存,编译器会再适当的地方
    自动插入retain,release和autorelease消息。

    (2)nonatomic,assign,copy,retain的区别
    nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。(atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所 以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。)
    assign: 简单赋值,不更改索引计数对基础数据类型 (NSInteger)和C数据类型(int, float, double, char, 等)
    copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString
    retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 对其他NSObject和其子类
    copy与retain的区别:
    copy是创建一个新对象,retain是创建一个指针,引用对象计数加1。
    eg:一个NSString 对象,地址为0×1111 ,内容为@”STR”
    Copy 到另外一个NSString 之后,地址为0×2222 ,内容相同,新的对象retain为1 ,旧有对象没有变化
    retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1
    也就是说,retain 是指针拷贝,copy 是内容拷贝。


    (3)#import 与 #include的区别
    #import
    In the C language, the #include pre-compile directive always causes a file's contents to be inserted into the source at that point. Objective-C has the equivalent #import directive except each file is included only once per compilation unit, obviating(去除) the need for include guards.
    for example 三个文件
    文件A.h
    文件B.h
    文件C.h
    文件C.h需要引入A.h、B.h ,文件B.h需要引入文件A.h,这样就重复引用了A.h两次,使用#import可以进行优化

    #import比起#include的好处就是不会引起交叉编译

    二、@class是用来做类引用的
    @class就是告诉编译器有这么一个类,至于类的定义是啥不知道

    @class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import

    举个例子说明:
    在ClassA.h中
    #import ClassB.h 相当于#include整个.h头文件。如果有很多.m文件#import ClassA.h,那么编译的时候这些文件也会#import ClassB.h增加了没必要的#import,浪费编译时间。在大型软件中,减少.h文件中的include是非常重要的。

    如果
    只是@class ClassB 那就没有include ClassB.h。仅需要在需要用到ClassB的ClassA.m文件中 #import ClassB.h

    那么什么时候可以用@class呢?
    如果ClassA.h中仅需要声明一个ClassB的指针,那么就可以在ClassA.h中声明
    @ClassB
    ...
    ClassB *pointer;


    (4)数据库三范式

    (5)GCD
    dispatch_sync 同步线程
    dispatch_async 异步线程

    (6)Objective-C中的instancetype和id区别
    1、相同点
    都可以作为方法的返回类型
    2、不同点
    ①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;
    ②instancetype只能作为返回值,不能像id那样作为参数。

    (7)NSInteger 和 int 区别

    查看源码
    #if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64

    typedef long NSInteger;

    typedef unsigned long NSUInteger;

    #else

    typedef int NSInteger;

    typedef unsigned int NSUInteger;
    #endif

    NSInteger是一个封装,它会识别当前操作系统的位数,自动返回最大的类型。
    当你不知道你的操作系统是什么类型的时候,你通常会想要使用NSInteger,所以或许你想要你的int类型范围尽可能的大,用NSInteger,32位系统NSInteger是一个int,即32位,但当时64位系统时,NSInteger便是64位的。一般推荐用NSInteger的。

  • 相关阅读:
    e667. 在给定图像中创建缓冲图像
    e661. 确定图像中是否有透明像素
    e673. Getting Amount of Free Accelerated Image Memory
    e663. 在gif图像中获取透明和色彩的数量
    e662. 取的图像的色彩模型
    e675. 翻转缓冲图像
    e665. 在图像中过滤三元色
    e679. 浮雕化图像
    e669. 绘制缓冲图像
    e664. 在图像中获取子图像
  • 原文地址:https://www.cnblogs.com/Clin/p/4708933.html
Copyright © 2020-2023  润新知