来自 金沙js77888 2020-01-09 22:48 的文章
当前位置: 金沙js77888 > 金沙js77888 > 正文

weak 必须用于 OC 对象

牛客网 iOS 题 42-65

主要原因:浏览器需要等待一段时间来判断是不是双击(double tap)

混合应用是在 Native App 上结合 Web View 来加载 Web 资源的 App,即在 native 中提供一个容器,用来加载 h5:优势:兼容性良好,成本低,更新快劣势:性能相对较差,用户体验差

NSTimer *myTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(doSomeThing:) userInfo:nil repeats:YES];[MyTimer fire];

创建 NSTimer 方法主要分为两个类型1.已经包含了创建与运行方法:scheduledTimerWithTimeInterval2.需要在创建后手动添加进 Runloop:

NsTimer *timer1 = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(timeMethod:) userInfo:nil repeats:NO];[[NSRunLoop currentRunLoop] addTimer:timer1 forMode:NSDefaultRunLoopMode];
  1. 在 ARC 中,在有可能出现循环引用时,往往要通过让其中一端使用 weak 来解决,比如:delegate 代理属性
  2. 自身对它进行一次强引用,没有必要再强引用一次,也会使用 weak;

不同点:assign 可以用于非 OC 对象,weak 必须用于 OC 对象

  • weak 指示符该属性对被赋值对象持有弱引用,弱引用的意思是:即使该弱引用指向被赋值的对象,该对象也可能被回收。
  • assign: 简单赋值,不更改索引计数(Reference Counting)。适用于基础类型(简单类型,原子类型):NSInteger,CGPoint,CGFloat,C数据类型(int,float,double,char等)。

发生机理:

  1. 网络不畅通,需要加载网络资源的时候卡顿;
  2. 线程阻塞,例如网络请求放在主线程中;
  3. 一次性在内存中加载过多的 UI 控件。

优化思路:

  1. 耗时较大的操作,例如网络请求,放到子线程中,主线程尽量只放些 UI 控件
  2. 减少布局复杂度

自由发挥

emmmm

  1. dealloc release dealloc
  2. dealloc release release
  3. dealloc dealloc dealloc
  4. release release release

答案:<font color=“LightYellow”>2</font>

alloc 初始化会使对象的 retainCount = 1,所以配对是 realease;retain 增加引用计数,release 减小引用计数;

  1. setName
  2. name = @"object"
  3. self.name = @"object"

答案:<font color=“LightYellow”>3</font>

OC语言在声明对象的时候自动封装了 setter 和 getter 方法,调用方式一般为:

  1. [self setName:@"obj"];
  2. self.name = @"obj";
  1. 主要用于多线程并发处理
  2. 它是一个队列,有严格的先进先出
  3. 它不会遵守严格的先进先出
  4. 可以通过调整权重开调整队列的执行顺序答案:<font color=“LightYellow”>1,3,4</font>

NSOPerationQueue会根据Operation的状态以及优先级来确定执行的NSOperation的顺序

  1. 将数据类型的确定有编译时,推迟到了运行时
  2. 运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法
  3. 假设 A 继承了 B 类,那么在编译时就已经生成了 A 的实例
  4. 多态是指不同对象以自己的方式响应相同的消息的能力

答案:<font color=“LightYellow”>1,2,4</font>

运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法,是多态的基础。实例的生成需要开辟空间,所以是在运行期生成

  1. category 可以在不获悉,不改变原来代码的情况下往里面添加新方法,只能添加,不能删除修改
  2. implement 可以增加,修改或删除方法,并且可以增加属性
  3. extensions 可以添加属性
  4. extensions 可以添加方法而不用实现

答案:<font color=“LightYellow”>1,3</font>

继承可以增加,修改或删除方法,并且可以增加属性extensions 添加的方法必须在被拓展的类的实现文件中实现

  1. 浅层复制:只复制引用对象的指针,而不复制引用对象本身;
  2. 深层复制:复制引用对象本身
  3. 如果是浅复制,修改一个对象可能会影响另一个对象;
  4. 如果是深复制,修改一个对象不会影响另外一个对象;

答案:<font color=“LightYellow”>1,2,3,4</font>

NSMutableArray *ary = [[NSMutableArray array] retain];NSString *str = [NSString stringWithFormat:@"test"];[str retain];[ary addObject:str];NSLog(@"%@%d", str, [str retainCount]);[str retain];[str release];[str release];NSLog(@"%@%d", str, [str retainCount]);[ary removeAllObjects];NSLog(@"%@%d", str, [str retainCount]);
  1. 2,3,1
  2. 3,2,1
  3. 1,2,3
  4. -1,-1,-1

答案:<font color=“LightYellow”>4</font>

在 MRC 模式下,NSString依然不能手动分配内存,在 OC 中系统有对其特殊的处理方式

  1. 谁申请,谁释放
  2. 内存管理主要要避免“过早释放”和“内存泄露”,对于“过早释放”需要注意@property 设置特性时,一定要对特性关键字,对于“内存泄漏”,一定要申请了要负责释放
  3. 关键字 alloc 或 new 生成的对象可以自动释放
  4. 设置正确的 property 属性,对于 retain 需要在合适的地方释放

答案:<font color=“LightYellow”>3</font>

alloc 和 new 生成的对象不会自动释放,要自动释放需要调用 autorelease 方法。

  1. readwrite 是可读可写特性,会同时生成 getter 和 setter 方法;
  2. readonly 是只读特性,只会生成 getter 方法;
  3. assign 是赋值属性,setter 方法将传入参数赋值给实例变量;
  4. nonatomic 是非原子操作,决定编译器生成的 setter 和 getter 方法是否原子操作;并表示多线程安全;一般使用 atomic;

答案:<font color=“LightYellow”>4</font>

atomic 才是线程安全的,但是更耗费性能,一般常用的是 nonatomic。

  1. Objective-C 支持多重继承
  2. Objective-C 中的类可以实现多个接口
  3. Objective-C 中导入头文件用的是 #include
  4. @class 用于注入对象

答案:<font color=“LightYellow”>2</font>

OC 只支持单一继承,但是可以利用协议代理的方法实现多个协议和接口;导入文件使用 #import,可以避免重复导入;@class 用于前向声明

  1. presentViewController: animated:completion
  2. dismissViewControllerAnimated:completion:
  3. addChildViewController:
  4. removeFromParentViewController

答案:<font color=“LightYellow”>1,2</font>

iOS 中的模态视图(Modal View):一般带有一个完成键和取消键,例如警告框

  1. 平铺导航 UITabbarController
  2. 标签导航 UINavigationController
  3. 树形导航 UIPageViewController
  1. UIViewController
  2. UINavigationController
  3. UITabBarController
  4. UITableViewController

答案:<font color=“LightYellow”>1,2,3</font>

UIViewController 是 UINavigationController 和 UITabBarController 的父类

答案:<font color=“LightYellow”>1</font>

平铺导航模式是指内容间没有从属关系

答案:<font color=“LightYellow”>1</font>

答案:<font color=“LightYellow”>1</font>

答案:<font color=“LightYellow”>1</font>

本文由金沙js77888发布于金沙js77888,转载请注明出处:weak 必须用于 OC 对象

关键词: iOS 牛客网