iOS开发细碎知识点总结一

一、写出ios方法获取ios内存使用情况
1.获取当前设备可用内存及所占内存的头文件

#import <sys/sysctl.h>
#import <mach/mach.h>

2.获取当前设备可用内存(单位:MB)

- (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;

}


3.获取当前任务所占用的内存(单位:MB)

- (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;

}

二、什么是安全释放?
答:置为nil再释放
三、什么是序列化和反序列化?
答:序列化是把对象转化成字节序列的过程,反序列化是把字节序列恢复成对象,序列化和反序列化可以将对象写入到文件或者数据库里
四、获取一台设备唯一标示的方法?
1.UDID,UDID全称是Unique Device Identifier,顾名思义,他就是苹果iOS设备的唯一识别码,他由40个字符的字母和数字组成。(已越狱手机不适用)

代码中获取UDID:自从iOS5之后,苹果就禁止了通过代码访问UDID,在这之前,可以使用[[UIDevice cuurrent] uniqueIdenfier] 这个方法来获取某设备UDID。苹果提供了一个参数identifierForVendor来替代原来UDID的作用。通过代码实现如下:


NSUUID *uuid = [UIDevice currentDevice].identifierForVendor;

这个identifierForVendor是应用和设备两者都有关的
2.UUID,Universally Unique Identifier,通用唯一标识符,为了保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间、随机或者伪随机数、时许等元素生成UUID算法。

最简单获取UUID的代码如下:

// 循环10次,每一次打印的值都是不一样的,当然循环的再多,这个值永远不会出现两个一样的值。
NSString *uuid = [NSUUID UUID].UUIDString;

苹果公司建议使用UUID为应用生成唯一标识字符串。虽然UUID是官方提出的一种替代UDID的建议方案。但系统升级后UUID可能会发生变化。

3.MAC Address
APP中需要一个能够标识设备唯一性的ID怎么办?
1.Mac地址+bundle_id
2.推送token+bundle_id
五、ios类是否可以多继承,如果没有,那可以使用其他方法实现吗?简述实现过程
答:不可以多继承,使用protocol实现
六、Block和函数指针的区别
答:1. 函数指针是对一个函数地址的引用,这个函数在编译的时候就已经确定了。Block是一个函数对象,是在程序运行过程中产生的。
七、怎样判断某个cell是否显示在当前屏幕上?
答:1.标记的cell 在tableview中的坐标值
2.当前cell在屏幕中的坐标值
3.坐标值和当前tableveiw的偏移量相比较
八、cocoa Touch 提供了几种core?
答:常用3中: 1.Core Animation,2.Core Audio,3.Core Data
Cocoa实际上有三个框架组成:
1.Foundation框架 2.Core Data框架 3.AppKit框架
Cocoa Touch 有三个框架组成:
1.Foundation框架 2.Core Data框架 3.UIKit框架
九、自动释放池什么时候创建,什么时候销毁?
1.启动runloop时候第一次创建
2.runloop退出的时候最后一次销毁
3.其他时候的创建和销毁:当runloop即将睡眠时销毁之前的释放池,重新创建一个新的。
十、NSMutableArray用copy修饰会出现什么问题?
添加,删除,修改数组内的元素的时候,程序会因为找不到对应的方法而崩溃,因为copy就是复制了一个不可变NSArray的对象。
十一、@property的本质是什么?ivar、getter、setter、如何生成并添加到这个类中的?
答:本质:@property = ivar+getter+setter;(实例变量+getter方法+setter方法)
在编译期自动生成getter、setter,还自动向类中添加适当类型的实例变量,也可以用@synthesize 语法来指定实例变量的名字。
十二、@synthesize和@dynamic分别有什么用?
答:
1.@property 有两个对应的词,一个@synthesize ,一个时@dynamic。如果@synthesize和@dynamic都没有写,那么默认的就是@synthesize var = _var;
2.@synthesize 的语意时如果你没有手动实现setter和getter方法,那么编译器会自动给你加上者两个方法。
3.@dynamic 告诉编译器:属性的setter和getter方法是由用户自己实现,不自动生成(当然对于readonly的属性只需提供getter即可)。假如一个属性被声明为@dynamic var,然后你没有提供@setter方法和@getter方法,编译的时候没有问题,但是程序运行到instance.var = someVar,由于缺少setter方法会导致程序崩溃,或者当运行到someVar=var时,由于缺少getter方法同样会导致崩溃。编译时没有问题,运行时才执行相应的方法,这就是所谓的动态绑定。
十三、ARC下不显式指定任何属性关键词时,默认的关键词都有哪些?
答:
1.基本数据类型:atomic、readwrite、assing
2.普通的OC对象,automic、readwrite、strong
十四、14.NSString、NSArray、NSDictionary经常使用copy修饰,如果改为strong会产生什么问题?

@property (nonatomic,strong)NSString *myStr1;
@property (nonatomic,copy)NSString *myStr2;

     NSMutableString *string = [[NSMutableString alloc] initWithString:@"123"];
     self.myStr1 = string;
     self.myStr2 = string;
     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值