iOS开发工程师笔试基础题

作者:达内 更新时间:2014-06-17 12:04 来源:未知 点击:
ios开发工程师笔试基础题。

    1、 main()
   int a[5]={1,2,3,4,5};
   int *ptr=(int *)(&a+1); 
   printf("%d,%d",*(a+1),*(ptr-1));
}
    答案:2、5
    分析:*(a+1)即a[1],为2;&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)int *ptr=(int *)(&a+1);则ptr实际是&(a[5]),也就是a+5。
    2、用预处理指令#define声明一个常数,用以表明一年都多少秒(忽略闰年的情况)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL #define的基本语法知识(不能以分号结尾、括号的使用等);懂得预处理器将为你计算常数表达式的值;意识到这个表达式将使一个16位机的整型数据溢出,因此要使用到长整型符号L,告诉编译器这个常数为长整型数。如果在表达式中用到了UL(表示无符号整型)。
    3、写一个标准的宏MIN,这个宏输入两个参数并返回较小的一个#define MIN(A,B) ((A) <= (B) ? (A) : (B))
    4、写一个NSString类的实现
    + (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding;
    + (id) stringWithCString: (const char*)nullTerminatedCString
            encoding: (NSStringEncoding)encoding
{
  NSString  *obj;
  obj = [self allocWithZone: NSDefaultMallocZone()];
  obj = [obj initWithCString: nullTerminatedCString encoding: encoding];
  return AUTORELEASE(obj);
}
     5、obj-c有多重继承吗?不是的话有什么替代方法?
没有,多继承在cocoa中使用protocol委托来实现
    6、obj-c有私有方法吗?是有变量呢?
    方法只有两种:静态方法和实例方法,默认为公有;变量:私有、保护和公有。默认为私有。
@interface Controller : NSObject { NSString *something; }
+ (void)thisIsAStaticMethod;
- (void)thisIsAnInstanceMethod;
@end
@interface Controller (private) -
(void)thisIsAPrivateMethod;
@end可以通过上述方法来实现方法的私有化
    7、关键字const有什么含意?修饰类呢?static的作用?用于类呢?还有extern C的作用
    1)•const意味着只读
       const int a;   a为一个常整型数
       int const a;   同上,a为一个常整型数
       const int *a; a为指向常整型数的指针(即整型数不可修改,但是指针可以)
       int* const a; a为指向整型数的常指针(即整型数可以修改,但是指针不可修改)
       int const *a const; a为一个指向常整数的常指针
    2)•static关键字作用
    (1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
    (2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
    (3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
    (4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
    (5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。
    3)•extern "C"的作用
    (1)被 extern "C"限定的函数或变量是 extern 类型的;
     extern 是 C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,
其声明的函数和变量可以在本模块或其它模块中使用。
    (2)被 extern "C"修饰的变量和函数是按照 C 语言方式编译和连接的;
    4)•extern "C"的惯用法
    (1)在 C++中引用 C 语言中的函数和变量,在包含 C 语言头文件(假设为 cExample.h)时,需进 行下列处理:
extern "C"
{
#include "cExample.h"
}
    而在 C 语言的头文件中,对其外部函数只能指定为 extern 类型,C 语言中不支持 extern "C"声明,在.c 文件中包含了 extern "C"时会出现编译语法错误。
    (2)在 C 中引用 C++语言中的函数和变量时,C++的头文件需添加 extern "C",但是在 C 语言中不能直接引用声明了 extern "C"的该头文件,应该仅将 C 文件中将 C++中定义的 extern "C"函数声明为extern 类型。
   8、框架分类
    •音频和视频
        Core Audio
        OpenAL
        Media Library
        AVFoundation
    •数据管理
        Core Data
        SQLite
    •图片和动画
        Core Animation
        OpenGL ES
        Quartz 2D
    •网络
        Bonjour
        WebKit
        BSD Sockets
    •用户应用
        Address Book
        Core Location
        Map Kit
        Store Kit
    9、obj-c的优缺点
    obj-c优点:
    1)Cateogies
    2)Posting
    3)动态识别
    4)指标计算
    5)弹性讯息传递
    6)不是一个过度复杂的C衍生语言
    7)obj-c与c++可混合编程
     obj-c缺点:
    1)不支持命名空间
    2)不支持运算符重载
    3)不支持多重继承
    4)使用动态运行时类型,所有方法都是函数调用,所以很多编译时优化方法都用不到。
    10、关键字volatile有什么含意?并给出三个不同的例子。
    一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确的说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:并行设备的硬件寄存器(如:状态寄存器),一个中断服务子程序会访问到的非自动变量多线程应用中被几个任务共享的变量,
    11、简述堆和栈的区别:栈是编译器自动管理,堆是程序员控制的;栈是一块连续的内存区域,是向低地址扩展的数据结构,堆是向高地址扩展的数据结构,是不连续的用链表存储的。

标签:

相关阅读

最新开班信息

3G-IOS软件工程师就业班
北京潘家园中心 开课日期:9月29日
3G-IOS软件工程师就业班
北京潘家园中心 开课日期:9月29日
3G-IOS软件工程师周末班
北京潘家园中心 开课日期:9月29日
3G-IOS软件工程师周末班
北京潘家园中心 开课日期:9月29日