1.数组和指针的区别?
1>数组可以在静态存储区和栈上被创建,其地址与容量在生命期内保持不变,只有内容可以被改变
2>指针可以随时指向任意类型的内存块,特征是”可变”,常用来操作动态内存
2.C 和 OC 如何混用?
1>OC 编译器在处理后缀为 m 的文件时,可以识别 OC 和 C 的代码,处理 mm 文件可以识别 OC , C , C++ 代码,但是 cpp 文件必须只能用 C 和 C++ 代码,而且 cpp 文件 include 的头文件中,也不能出现 OC 的代码
2>在 mm 文件中混用 cpp 直接使用即可
3>在 cpp 中混用 OC ,如果模块以类实现,那么要按照 cpp class 的标准写类的定义,头文件中不能出现 OC 的东西,包括 #import cocoa . 实现文件中,即类的实现代码中可以使用 OC 的东西,可以 #import ,但是后缀是 mm ;如果模块以函数实现,那么头文件要按照 C 的格式声明函数,实现文件中 , C++ 函数内部可以使用 OC, 但后缀还是 mm 或者 m
3.在开发项目中,如何检测内存泄露?
1>在编写代码的时候,使用规范的代码格式
2>在程序运行的时候启动Instruments工具,如果内存增长不为0则说明存在内存泄露问题
3>在程序运行的时候开启僵尸模式
4.@property 中有哪些属性关键词?
copy , retain , nonatomic , atomic , strong , weak , assign , readonly , readwrite
5.weak 属性需要dealloc中设置 nil?
不需要,在 iOS5 以后,当用 weak 属性修饰的属性的引用计数 ( retainCount ) 为零了之后,系统自动将这个属性设置为 nil
6.怎么用 copy 关键字
1.带有 copy 关键字的属性会在赋值的时候重新创建一个新的并且和以前一样的对象.
2.在对象之间 copy ,首先对象必须继承与 NSObject ,并且必须实现协议,最后在方法里面实现 - (id) copyWithZone:(NSZone*)zone 方法
7.objc 中向一个 nil 对象发送消息将会发生什么
在 objc 中向一个 nil 对象发送消息是完全有效的,只是在运行是不会有什么效果. 例如: Student *student =[[Student alloc] init];
student = nil;
student.name = @“袁涛”;
NSLog(@“name = %@“,student.name);
这里会打印 name = ( null )
8.什么时候会报 unrecognized selector 的异常
出现这样的错误原因是:系统未能识别某个(某些)方法调用的函数(消息),包括引用的实例方法不存在,和这个方法在类里面没有实现;
有时是因为实例对象在内存中已经销毁,有时也可能是因为你所调用的对象根本不存在某个方法
通常出现在错误地将 A 类的实例当成 B 类实例来使用
9.如何渲染自定义格式字符串的 UILabel
典型的例子:关键字高亮
NSString *string = @“0123456”;
[string addAttribute:NSForegroundColorAttributeName value [UIColor redColor] range:NSMakeRange(0,2)];
[string addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:30] range:NSMakeRange(1,4)];
UILabel *label = [[UILabel alloc] initWithFrame:…..]'
label.text = string;
10.objc 中的类方法和实例方法有什么本质的区别
类方法是+ 实例方法是-
类方法里面的 self 指的是该类 实例方法里面的 self 指的是该类的对象
类方法只能被该类调用 实例方法只能被该类的实例调用
类方法不能调用成员变量 实例方法,可以调用成员变量和类成员变量
类方法不能被覆盖 实例方法可以被覆盖