zoukankan      html  css  js  c++  java
  • iOS 面试题

    int a[5] = {1,2,3,4,5};
    int *ptr = (int*)(&a+1);
    printf("%d,%d",*(a+1),*(ptr-1));

    上面代码输出结果是:2,5

    sizeof:是一个运算符,类型结果为size_t,在头文件中typedef为unsigned int,值通常在编译时计算好,参数类型可以是数组、指针、类型、对象,函数等。注意对齐问题,要以最长类型计算,得出占用字节的大小。

    strlen:是一个函数,只能用char*做参数,且必须是以结尾,在运行时才能得出结果,返回的是字符的实际长度。

    strcpy:函数只用于字符串的拷贝,源字符与目标字符在拷贝时长度不满足拷贝都会导致地址混乱,两字符串重叠则结果混乱,遇到结束符则终止拷贝。

    strncpy:同strcpy,且可自定义拷贝长度,但结果不包含,需自己加结束符。

    sprintf:函数操作的对象不限于字符串,源对象可以是任意基本类型的数据,主要实现将其他数据类型转换为字符串,遇到结束符停止拷贝。

    memcpy:实现将一块内存拷贝到另一块内存,没有类型限制,可指定长度,但同样要注意越界,重叠等问题。

    C和C++中的struct有什么不同?和C++的class呢?

    C的struct没有权限设置,没有成员函数,没有构造函数,虚构函数等等,是用户自定义的数据类型(UDT)

    C++的struct是抽象数据类型(ADT),支持成员函数的定义,几乎与class一致,区别是struct的成员默认是public,class中默认是private的;在用模版的时候只能写template <class Type>或template <typename Type>不能写template <struct Type>;

    此外,如果没有多态和虚拟继承,在C++中,struct和class的存取效率完全相同!简单的说就是,存取class的data member和非virtual function效率和struct完全相同!不管该data member是定义在基类还是派生类的。 如果不是为了和C兼容,C++中就不会有struct关键字。

    因此建议是:如果不需要与C兼容或传递参数给C程序,不要在C++中用struct。

    不用变量实现两个数字交换的代码如下:

    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

    IBOutlet的属性设置为weak是为什么呢?

    IBOutlet连接的属性,相当于创建了一个对象,添加到当前VC的View中,view对添加到它上面的控件是强引用的,我们在VC中仅是对其使用,并没有必要拥有它,所以是weak的。将weak改成strong也没问题,当VC释放,则该控件引用计数器会自动减1,紧接着VC的View释放,该控件引用计数器继续减1,并不会造成循环引用。

    ARC中属性关键字

    atomic,nonatomic,readwrite,readonly,strong,weak,assign,copy,retain,unsafe_unretained,geter=<name>,setter=<name>

    默认属性有readwrite,atomic,strong(对象),assgin(基本数据类型)

    @synthesize指令高数编译器在编译期间产生getter和setter方法

    @dynamic指令告诉编译器在编译期间不自动生成getter和setter方法,主要用于NSManageObject对象的属性声明中

    weak的生命周期:具体实现方法

     __weak与__block的区别

    __block可修饰对象和基本数据类型,被修饰对象可在block中重新赋值,适用于ARC和MRC

    __weak只能修饰对象,可避免循环引用,适用于ARC

    http://www.cocoachina.com/ios/20160817/17373.html
    http://www.cocoachina.com/ios/20160819/17398.html
    https://github.com/ChenYilong/iOSInterviewQuestions

  • 相关阅读:
    Class.forName()用法详解 【转】
    Java ——代理模式[转发]
    Java堆和栈的区别
    CSS中文字体的英文名称(simsun)宋体,(Microsoft YaHei)微软雅黑
    学了一个封装的jquery插件,感觉还成
    视差滚动(Parallax Scrolling)效果的原理和实现
    解决jQuery中dbclick事件触发两次click事件
    jquery之stop()的用法
    创意 idea
    软件开发方法的综述
  • 原文地址:https://www.cnblogs.com/nmzd/p/5723406.html
Copyright © 2011-2022 走看看