• IOS面试题object-c 51-60


    51. 阐述常见的 Objective-C 的数据类型 ?

    Objective-C的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;

    NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。

    NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本身是int还是long

    🚀🚀🚀🚀🚀🚀
     52. Object-C id 声明的对象有什么特性?
    id声明的对象具有运行时的特性,即可以指向任何类型的OC对象。
    (1) 没有*号
    (2)动态数据类型
    (3)可以执行任何类的对象,而不关心它的具体的数据类型
    (4)在运行时检查它的具体的数据类型
    (5)可以对其发送任何的消息
    🚀🚀🚀🚀🚀🚀
    53. 简述Objective-C 如何对内存管理的 ?
    Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池
    1). 自动内存计数ARC:由Xcode自动在App编译阶段,在代码中添加内存管理代码。
    2). 手动内存计数MRC:遵循内存谁申请、谁释放;谁添加,谁释放的原则。
    3). 内存释放池Release Pool:把需要释放的内存统一放在一个池子中,当池子被抽干后(drain),池子中所有的内存空间也被自动释放掉。内存池的释放操作分为自动和手动。自动释放受runloop机制影响。

    OC内存管理遵循“谁创建,谁释放,谁引用,谁管理”的机制,当创建或引用一个对象的时候,需要向她发送alloc、copy、retain消息,当释放该对象时需要发送release消息,当对象引用计数为0时,系统将释放该对象,这是OC的手动管理机制(MRC)。
    目前:iOS 5.0之后引用自动管理机制——自动引用计数(ARC),管理机制与手动机制一样,只是不再需要调用retain、release、autorelease;它编译时的特性,当你使用ARC时,在适当位置插入release和autorelease;它引用strong和weak关键字,strong修饰的指针变量指向对象时,当指针指向新值或者指针不复存在,相关联的对象就会自动释放,而weak修饰的指针变量指向对象,当对象的拥有者指向新值或者不存在时weak修饰的指针会自动置为nil。
    如果使用alloc、copy(mutableCopy)或者retian一个对象时,你就有义务,向它发送一条release或者autorelease消息。其他方法创建的对象,不需要由你来管理内存。
    🚀🚀🚀🚀🚀🚀
    54. 阐述 Objective-C 中创建线程的方法 ?
    线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:
    🚀🚀🚀🚀🚀🚀
    55. Category(类别)、 Extension(扩展)和继承的区别?
    区别:
    1. 分类有名字,类扩展没有分类名字,是一种特殊的分类。
    2. 分类只能扩展方法(属性仅仅是声明,并没真正实现),类扩展可以扩展属性、成员变量和方法。
    3. 继承可以增加,修改或者删除方法,并且可以增加属性。
    56. 常见的Delegate属性都用是week而不是retain/strong?
    是为了防止delegate两端产生不必要的循环引用。
    @property (nonatomic, weak) id delegate;
    🚀🚀🚀🚀🚀🚀
    57. 简述Object-C什么时候用Delegate,什么时候用Notification?
    Delegate(委托模式):1对1的反向消息通知功能。
    Notification(通知模式):只想要把消息发送出去,告知某些状态的变化。
    🚀🚀🚀🚀🚀🚀
     58. 简述 OC中的反射机制?
    1). class反射
    通过类名的字符串形式实例化对象。
    Class class = NSClassFromString(@"student");
    Student *stu = [[class alloc] init];
    将类名变为字符串。
    Class class =[Student class];
    NSString *className = NSStringFromClass(class);
    2). SEL的反射
    通过方法的字符串形式实例化方法。
    SEL selector = NSSelectorFromString(@"setName");
    [stu performSelector:selector withObject:@"Mike"];
    将方法变成字符串。
    NSStringFromSelector(@selector*(setName:));
    🚀🚀🚀🚀🚀🚀
    59. 阐述什么是OC 谓词?
    谓词就是通过NSPredicate给定的逻辑条件作为约束条件,完成对数据的筛选
    //定义谓词对象,谓词对象中包含了过滤条件(过滤条件比较多)
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age<%d",30];
    //使用谓词条件过滤数组中的元素,过滤之后返回查询的结果
    NSArray *array = [persons filteredArrayUsingPredicate:predicate];
    🚀🚀🚀🚀🚀🚀
    60. Object-C如何访问并修改一个类的私有属性?
    1). 一种是通过KVC获取。
    2). 通过runtime访问并修改私有属性。
    🚀🚀🚀🚀🚀🚀

  • 相关阅读:
    那些.NET中的连接池
    java计算机毕业设计景区失物招领平台演示录像源码+数据库+lw文档+系统
    xctf攻防世界 Web高手进阶区 web2
    Docker Daemon
    SPA项目搭建及嵌套路由
    使用 Win2D 实现融合效果
    电气比例阀和压力传感器测控精度的基本概念及其使用方法
    C语言-写一个简单的Web服务器(二)
    隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态
    java毕业生设计一起组局校园交友平台计算机源码+系统+mysql+调试部署+lw
  • 原文地址:https://blog.csdn.net/u013491829/article/details/136581690