面试相关

来源:互联网 发布:淘宝店童装货源 编辑:程序博客网 时间:2024/06/05 12:50
//
进程中所包含的一个或多个执行单元称为线程(thread)。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问。


  通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。


//  
现在苹果明确的表明你应该使用-[UIDevice identifierForVendor]或是-[ASIdentifierManager advertisingIdentifier]来作为你框架和应用的唯一标示符。坦白的来说,应对这些变化也不是那么的难,见以下代码片段:
NSString *identifierForVendor = [[UIDevice currentDevice].identifierForVendor UUIDString]; 
NSString *identifierForAdvertising = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString]; 
每种方法都适配一种特别的用法:
  identifierForVendor对供应商来说是唯一的一个值,也就是说,由同一个公司发行的的app在相同的设备上运行的时候都会有这个相同的标识符。然而,如果用户删除了这个供应商的app然后再重新安装的话,这个标识符就会不一致。
  advertisingIdentifier会返回给在这个设备上所有软件供应商相同的 一个值,所以只能在广告的时候使用。这个值会因为很多情况而有所变化,比如说用户初始化设备的时候便会改变。


//  当前设备内存可用
- (double)availableMemory


{


  vm_statistics_data_t vmStats;


  mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;


  kern_return_t kernReturn = host_statistics(mach_host_self(), 


                                             HOST_VM_INFO, 


                                             (host_info_t)&vmStats, 


                                             &infoCount);


  


  if (kernReturn != KERN_SUCCESS) {


    return NSNotFound;


  }


  


  return ((vm_page_size *vmStats.free_count) / 1024.0) / 1024.0;


}


//  当前任务所占用的内存


- (double)usedMemory
{


  task_basic_info_data_t taskInfo;


  mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;


  kern_return_t kernReturn = task_info(mach_task_self(), 


                                       TASK_BASIC_INFO, 


                                       (task_info_t)&taskInfo, 


                                       &infoCount);






  if (kernReturn != KERN_SUCCESS


      ) {


    return NSNotFound;


  }


  


  return taskInfo.resident_size / 1024.0 / 1024.0;


}


1.  NSKeyedArchiver(加密形式)   
       2.  NSUserDefaults
       3.  Write写入方式
       4.  SQLite3




12.深拷贝和浅拷贝的理解?








答:对一个实例进行深拷贝时当前类需要实现NSCopying协议。




       浅拷贝是复制出来一个跟原对象是同一地址的对象,而深拷贝则是复制出来一个跟源对象不同地址的对象,改变原对象,对新对象没有影响。




16.什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?






答:把对象转换为字节序列的过程称为对象的序列化 




        把字节序列恢复为对象的过程称为对象的反序列化




       将对象写到文件或者数据库里,并且可以读取出来






    遵循NSCoding协议,来实现复杂对象的存储






    实现该协议后就可以对其进行打包或者解包,然后转化为NSData
17.写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?
答:#define MIN((A),(B)) ((A(A:B))
延展问题:写宏的时候要注意些什么问题呢?
函数宏后面的参数都要用括号单独括起来,函数名大写
#define A 20


动态类型能使程序直到执行时才确定对象所属类型
动态类型绑定能使程序直到执行时才确定要对对象调用的实际方法
4.动态类型识别常用方法


-(BOOL)isKindOfClass:classObj  是否是classObj类或其子类


-(BOOL)isMemberOfClass:classObj是否是classObj的实例


-(BOOL)respondsTosSelector:selector  类中是否有这个方法


NSClassFromString(NSString*);由字符串得到类对象


NSStringFromClass([类名 Class]);由类名得到字符串


 


Class rectClass= [Rectangle class];通过类名得到类对象


Class aClass =[anObject class];通过实例得到类对象


if([obj1 class]== [obj2 class])判断是不是相同类的实例
0 0
原创粉丝点击