一、选择题
1、面向对象的特征:封装、继承、多态。
2、便利构造器的例子:
+(id)studentWithName:(NSString *)aName andAge:(int)anAge{
Student *student=[[Student alloc]initWithName:aName andAge:anAge];
[student autorelease];
return student;
}
3、向Xcode控制台输出一个字符串使用:NSLog()
4、Objective-C中得委托最好声明成:assign
5、Objective-C中所有实例变量默认的访问权限为:protected
6、如果一个类遵从一项协议,那么它必须实现:这个协议里的所有required methods
二、简答题
1、#import跟#include有什么区别,@class呢?
答:A类要用到B类的一个对象作为自己的一个实例变量,那么在A类的.h文件中要写上“@class B”,如果还要使用B类中得方法和成员变量,那么在A类的.m文件中还要使用 #import “B.h”。#import解决了#include不能解决的重复引用问题。
2、Objective-C有多继承吗?没有的话用什么代替?
答:Objective-C没有多继承,用委托代理来实现。
3、property中属性retain、copy、assign的含义是什么,有什么区别?
答:assign——用于简单的数据类型,如NSInteger、bool、double
copy和retain用于对象:
copy——用于当a指向一个对象,b也想指向同样的对象的时候,如果用assign,a如果释放,再调用b会Crash,如果用copy的方式就不会,因为copy后,a和b各自有自己的内存。
retain——会使引用计数加1,也可以解决assign问题。
4、id、nil代表什么?
答:id——动态对象类型
nil——动态类型和静态类型对象的否定词汇。表示为空对象。
5、OC中为什么会出现野指针?会有什么样的后果?
答:
1 Student *stu = [[Student alloc] init]; 2 //stu这个指针变量指向Student的对象 3 [stu setAge:10]; 4 //给stu所指向的Student对象发送setAge:消息,即调用这个Student的setAge:方法 5 [stu release]; 6 //给stu所指向的Student对象发送一条release消息,当Student对象接收到release消息以后,Student对象马上会被销毁,所占用的内存会被回收 7 [stu setAge:10];
//因为Student的对象被销毁了,它之前的占用内存就变成了垃圾内存,这时stu成了野指针。