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"的惯用法
行下列处理:
extern "C"
{
#include "cExample.h"
}
而在 C 语言的头文件中,对其外部函数只能指定为 extern 类型,C 语言中不支持 extern "C"声明,
在.c 文件中包含了 extern "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、简述堆和栈的区别
栈是编译器自动管理,堆是程序员控制的。
栈是一块连续的内存区域,是向低地址扩展的数据结构,堆是向高地址扩展的数据结构,是不连续的用链表存储的。