ios开发工程师笔试基础题

参考:http://www.cnblogs.com/duchengdong/archive/2012/03/30/2425300.html

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的作用

  • const意味着只读

       const int a;   a为一个常整型数

       int const a;   同上,a为一个常整型数

       const int *a; a为指向常整型数的指针(即整型数不可修改,但是指针可以)

       int* const a; a为指向整型数的常指针(即整型数可以修改,但是指针不可修改)

       int const *a const; a为一个指向常整数的常指针

  • static关键字作用

(1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;

(2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;

(3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;

(4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;

(5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。 

  • extern "C"的作用

(1)被 extern "C"限定的函数或变量是 extern 类型的;

 extern 是 C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器, 
其声明的函数和变量可以在本模块或其它模块中使用。

(2)被 extern "C"修饰的变量和函数是按照 C 语言方式编译和连接的;

  • 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变量的几个例子:

1、并行设备的硬件寄存器(如:状态寄存器)

2、一个中断服务子程序会访问到的非自动变量

3、多线程应用中被几个任务共享的变量

11、简述堆和栈的区别

栈是编译器自动管理,堆是程序员控制的。

栈是一块连续的内存区域,是向低地址扩展的数据结构,堆是向高地址扩展的数据结构,是不连续的用链表存储的。

posted @ 2012-10-04 12:45  FoxBabe  阅读(6881)  评论(1编辑  收藏  举报