首页 > 其他 > 详细

ios软件工程面试题(3)

时间:2014-02-19 15:53:59      阅读:305      评论:0      收藏:0      [点我收藏+]

1.sandBox的目录结构


home(沙盒名字-一串字符数字混合)

           Documents

           Library

                 Caches

                Preferences

          tmp


      bubuko.com,布布扣


1)获取home目录: home(沙盒名字-一串字符数字混合)

   NSString *homeDirectory = NSHomeDIrectory();

  2012-06-17 14:00:06.098 IosSandbox[3536:f803] /Users/rongfzh/Library/Application Support/iPhone Simulator/5.1/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2   


2)获取document目录

NSArray *paths = NSSearchpathForDirectioriesInDomains(NSDocumentDIrectory,NSUserDomainMask,YES);

NSString *path = [paths objectAtIndex:0];

2012-06-17 14:00:06.099 IosSandbox[3536:f803] path:/Users/rongfzh/Library/Application Support/iPhone Simulator/5.1/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2/Documents


3)获取cache目录

   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *path = [paths objectAtIndex:0];
    5EEE-4C2F-B0CB-4C3F02B996D2/Library/Caches 


4)获取 Library目录

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    NSString *path = [paths objectAtIndex:0];
    NSLog(@"%@", path);

5)获取Tmp目录

NSString *tmpStr = NSTemporaryDirectory();

s/g7/246bh79130zblw0yjjtc55cw0000gn/T/ 


7介绍一下 pushing的整体流程

作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的.

注册通知:即要在什么地方接受消息

[NSnotificationCenter defaultCenter]addObserver:self selector:@selector(dosmething:) name:@“name”

               [[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector(mytest:) name:@" mytest" object:nil];   注册通知,作为受体。

      参数介绍:

          addObserver: 观察者,即在什么地方接收通知;

        selector: 收到通知后调用何种方法;

        name: 通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。

发送通知:调用观察者处的方法。

           [[NSNotificationCenter defaultCenter] postNotificationName:@"mytest" object:searchFriendArray];

          参数:

         postNotificationName:通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。

                 object:传递的参数

注册方法的写法:

- (void) mytest:(NSNotification*) notification

{

   id obj = [notification object];//获取到传递的对象

 

8.关于block的理解,需要注意什么?自定义一个块A,参数为int,返回值为int

blcok 如果想递归调用,代码块变量必须是静态变量或者全局变量。


码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。

int (^A)(int) = ^(int num){ return num*num};

bubuko.com,布布扣


9。#import 和#include的区别,ios7中的@import呢?

[

下面的总结:#import#include基本相同,一般来说,#include是用于c,c++中的。可能导致重复引用。而#import则更多是用在oc中,且避免勒重复引用的问题。在ios7中添加了新语法 @import,和#improt的作用大致相同,但是缺点是不能使用在第三方库和自定义的类中。


]

#include

        #include  <>    :用于对系统文件的引用,编译器会在系统文件目录下去查找该文件。
 
        #include "xx.h":用于对用户自定义的文件的引用,编译器首先会去用户目录下查找,然后去安装目录,最后去系统目录查找。
 
       注:使用include要注意重复引用的问题:
 
       class A,class B都引用了class C,class D若引用class A与class B,就会报重复引用的错误。
 
#import
      功能与include基本相同,不过它避免了重复引用的问题。所以在OC中我们基本用的都是import。

{

对应新增语法:@import,导入系统头文件,例如:@import MapKit;  或者库的部分头文件:@import UIKit.UIView;

优点:不需要再在Build Phases里的Link Binary With Libraries添加系统framework文件;缺点:不支持自定义或第三方库

}
 
@class
      @class就是告诉编译器有这个类存在,但是类是如何实现的不用告诉编译器.若.m文件用到了这个类,还是要在.m文件汇总import这个类的。
      既然这样,为什么不直接在头文件中import呢,举个例子:
      class A引用了class B,class B引用了class C.... , class A,B,C...的头文件又import了很多文件,那么 import了A的话,编译器就需要编译大量的文件,编译时间就会增加。 
 
      难道头文件中都是用@class吗?当然不是,有时也是需要#import的,那么什么时候该用什么呢?
(1)一般如果有继承关系的用#import,如B是A的子类那么在B中声明A时用#import;
 
(2) 另外就是如果有循环依赖关系,如:A->B,B->A这样相互依赖时,如果在两个文件的头文件中用#import分别声明对方,那么就会出现头文件循环利用的错误,这时在头文件中用@class声明就不会出错;
 
(3)还有就是自定义代理的时候,如果在头文件中想声明代理的话如@interface SecondViewController:UIViewController时应用#import不然的话会出错误,注意XXXXDelegate是自定义的。

10.UIImageView可以直接点击么 ?怎么样才能做到可以点击?

正常情况下是不可以直接点击的。

只有设置UIImageView的属性 userInteractionEnabled = yes才可以点击、。

ios软件工程面试题(3)

原文:http://blog.csdn.net/ministarler/article/details/19421879

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!