码迷,mamicode.com
首页 > 其他好文 > 详细

Interview

时间:2015-03-04 16:45:29      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

1.objective-c中的数字对象都有哪些,简述它们与基本数据类型的区别是什么

objective-c 中的数字对象是 NSNumber,可以将 int 封装为 NSNumber 对象,也可以从 NSNumber 中得到 int,(即拆装箱操作):

//将int转为NSNumber
NSNumber *num = [NSNumber numberWithInt:123];
//得到一个int
int testNum = [num intValue]; 
注意区分NSInteger、CGFloat这些都是在Foundation框架下的别名,点进去看实际上它们还是int 和 float

 

2.用NSLog函数输出一个浮点类型,结果四舍五入,并保留一位小数

NSLog(@"保留两位小数:%.1f",4.8356); 

 

3.截取字符串”20|http://zcw-java.iteye.com“ 中 ‘|’字符前面及后面的数据,分别输出它们

NSRange range = [str rangeOfString:@"|"];//获取范围
int location = range.location;//获取位置
NSString *str1 = [str subStringToIndex:location];//截取到第几位
NSString *str2 = [str subStringFromIndex:location+1];//从第几位开始截取 

 

4.objective-c中的字典对象、可变字典对象是哪个,初始化一个含有两个键值对的可变词典对象,并动态的添加和删除一条记录,输出第一条记录

字典NSDictionary,可变字典NSMutableDictionary,
//初始化一个可变词典,带有2个键值对
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",nil];
//添加
[dic setObject:@"value3" forKey:@"key3"];
//删除
[dic removeObjectForKey:@"key3"];
//获取(按key获取)
[dic objectForKey:@"key1"]; 

 

5.获取项目根路径,并在其下创建一个名称为userData的目录。

// 获取根路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex: 0];
// 创建文件系统管理器
NSFileManager *fileManager = [[NSFileManager alloc] init];
// 判断userData目录是否存在
if(![fileManager fileExistsAtPath:[NSString stringWithFormat:@"%@/userData", documentsDirectory]]) {
  // 不存在,创建一个userData目录
  [fileManager createDirectoryAtPath:[NSString stringWithFormat:@"%@/userData", documentsDirectory]withIntermediateDirectories:false attributes:nil error:nil];
  //复习文件管理
}
//如果你在mac上测试一定是在你得文稿下边,但装到手机上就不一样了,每一个iPhone应用都会有一个自己独立得documents,所以不会冲突!

 

6.在一个对象的方法里面:self.name = “object”;和name =”object”有什么不同吗?

这个比较重要,self.name="object"隐式调用了set方法,所以这里如果你的set是自己写的,那么一定不要在set里self.name=name;这样的语法会造成死循环,还会使retainCount(引用计数+1)。 name=“object”,直接赋值!引用计数不变

 

7. 定义属性时,什么情况使用copy,assign,和retain

  • assign用于基本数据类型,如NSInteger,double,bool。
  • retain 和copy用于对象,copy是深拷贝,而assign是浅拷贝。copy用于当 a指向一个对象,b也想指向同样的对象的时候,如果用assign,a如果释放,再调用b会crash,如果用copy 的方式,a和b各自有自己的内存,就可以解决这个问题。
  • retain 会使计数器加一,也可以解决assign的问题。
  • 另外:tomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。 
 
 8. ViewController 的viewDidLoad, viewWillAppear, viewDidUnload, dealloc 分别是在什么时候调用,在自定义ViewController的时候这几个函数里面应该做什么工作? 
先来看看 UIViewController 的三个方法:loadView, viewDidLoad 和 viewDidUnload 的关系
(详细参见 loadView, viewDidLoad 和 viewDidUnload 的关系)。
  1)第一次访问UIViewController的view时,view为nil,然后就会调用loadView方法创建view
  2)view创建完毕后会调用viewDidLoad方法进行界面元素的初始化
  2)当内存警告时,系统可能会释放UIViewController的view,将view赋值为nil,并且调用viewDidUnload方法当再次访问UIViewController的view时,view已经在3中被赋值为nil,所以又会调用loadView方法重新创建viewview被重新创建完毕后,还是会调用viewDidLoad方法进行界面元素的初始化
  3)dealloc方法,viewDidUnload和dealloc方法没有关联,当控制器的引用计数为0时,才会调用dealloc方法。
流程应该是这样:

loadView来加载view到内存 -->viewDidLoad函数进一步初始化这些view -->内存不足时,调用viewDidUnload函数释放views -->当需要使用view时有回到第一步
如此循环
  4)viewWillAppear方法,视图即将过渡到屏幕上时调用,(一般在返回需要刷新页面时,我都选择使用代理,所以很少用到)
  5)viewWillDisappear方法,view即将消失时调用。
 
9.简述objective-c内存管理的实现机制,并简述什么时候由你负责释放对象,什么时候不由你释放
 

Interview

标签:

原文地址:http://www.cnblogs.com/actionke/p/4313540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!