开发问题笔记(十二)

目录

1.如果NSMutableArray用copy修饰可以不可以?
2.KVC 与 KVO 使用理解
3.委托和代理一样吗?
4.野指针与空指针?
5.抽象工厂模式在 Cocoa SDK 中哪些类中体现?
6.友盟统计埋点
7.基础属性修饰
8.frame和bounds的区别,frame的宽⾼高在什么情况下和bound的宽⾼高不⼀一样?
9.ARC和MRC的内存管理⽅方式本质上区别?为什么?
10.layoutSubviews在哪些情况下会被调用?
11.NSThread中的Runloop的作用,如何使用?
12.简述类⽬目优点和缺点,如果覆盖本类或者⽗父类的⽅方法,会出现什么问题?
13.为什么要⽤用-all_load&-ObjC?
14.runtime如何通过selector找到对应的IMP地址?(分别考虑类⽅方法和实例⽅方法)
15.一个Objective-C对象如何进⾏行内存布局?
16.当前视图有5页数据,浏览到第三页,点击详情跳转过去,回来怎么继续停留在第三页,若请求数据?
17.@synthesize和@dynamic分别有什么作用?
18.用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
19.objc 使用什么机制管理对象内存?
20.不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(比如在一个vc的viewDidLoad中)
21.表情包素材链接
22.iOS学习之 plist文件的读写
23.用masonry动态布局的时候,如果在一个数组里面创建多个按钮,一排最多3个按钮,怎么布局,在多少个未定的情况下?(使用到Masonry哪个属性)
24.bug之打包奔溃
25.ViewController的生命周期
26.Xcode 新建文件时频繁崩溃
27.好用第三方推荐
28.不用写pch文件,直接h文件效果等同pch
29.如何将自己的库上传到CocoaPods
30.跳转淘宝商品详情与淘宝店铺(App+网页)

1.如果NSMutableArray用copy修饰可以不可以?

当 copy 修饰可变类型集合(例如:NSMutableArray)时,赋值后,会导致可变类型属性变为不可变类型,然后在调用可变类型方法时,会产生异常错误。产生异常的原因是 copy 属性在运行时赋值时调用了 -copyWithZone:赋值,将可变类型转换为不可变类型。

开发问题笔记(十二)_第1张图片
开发问题笔记(十二)_第2张图片
开发问题笔记(十二)_第3张图片
开发问题笔记(十二)_第4张图片

2.KVC 与 KVO 使用理解

  • 1.KVC

KVC的keyPath可以是属性、实例变量、成员变量


开发问题笔记(十二)_第5张图片
KVC的底层实现
开发问题笔记(十二)_第6张图片
开发问题笔记(十二)_第7张图片
  • 2.KVO的底层原理是什么?

KVO的keyPath可以是属性、实例变量、成员变量。KVO的底层基于 runtime 机制实现

3.委托和代理一样吗?

开发问题笔记(十二)_第8张图片

4.野指针与空指针?

开发问题笔记(十二)_第9张图片

5.抽象工厂模式在 Cocoa SDK 中哪些类中体现?

开发问题笔记(十二)_第10张图片

6.友盟统计埋点

开发问题笔记(十二)_第11张图片
开发问题笔记(十二)_第12张图片

7.基础属性修饰

开发问题笔记(十二)_第13张图片
自己的笔记.png

8.frame和bounds的区别,frame的宽⾼高在什么情况下和bound的宽⾼高不⼀一样?

frame:当前界面元素在其父界面元素中的位置和大 小
bounds:当前界面元素在其自身坐标系统中的位置和 大小

9.ARC和MRC的内存管理⽅方式本质上区别?为什么?

10.layoutSubviews在哪些情况下会被调用?

11.NSThread中的Runloop的作用,如何使用?

12.简述类⽬目优点和缺点,如果覆盖本类或者⽗父类的⽅方法,会出现什么问题?

1.类目优点不需要通过增加子类而增加现有类的行为 (方法),且类目中的方法与原始类方法基本没有区别;
2.通过类目可以将庞大一个类的方法进行划分,从而便 于代码的日后的维护、更新以及提高代码的阅读性;
3.缺点无法向类目添加实例变量,如果需要添加实例变 量,只能通过定义子类的方式;如果覆盖父类的方法,可 能导致 super 消息的断裂。因此,最好不要覆盖原始类 中的方法。

13.为什么要⽤用-all_load&-ObjC?

14.runtime如何通过selector找到对应的IMP地址?(分别考虑类⽅方法和实例⽅方法)

15.一个Objective-C对象如何进⾏行内存布局?

16.当前视图有5页数据,浏览到第三页,点击详情跳转过去,回来怎么继续停留在第三页,若请求数据?

你只要不在viewWillAppear里面刷新视图和请求数据。那你返回上一个页面是不会刷新的呀

17.@synthesize和@dynamic分别有什么作用?

开发问题笔记(十二)_第14张图片

18.用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?

https://blog.csdn.net/weixin_33725515/article/details/88027657

19.objc 使用什么机制管理对象内存?

用的是引用计数的机制。通过 retainCount 的机制来决定对象是否需要释放。每次 run loop 的时候,都会检查对象的 retainCount,如果 retainCount 为 0,说明该对象没有地方需要继续使用了,可以释放掉了。

iOS内存管理.PNG

20.不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(比如在一个vc的viewDidLoad中)

不手动指定 autoreleasepool 的前提下 ,autorealese 在一个 runloop 周期结束后进行内存释放,在收到内存警告时也会就行内存释放。
https://www.jianshu.com/p/e69e303ba1b4

  • 补充:对象是什么时候被release的?

引用计数为0时被release。autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的 Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。对于每一个Runloop, 系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object(就是autorelease的对象)会被release。那什么是一个Runloop呢? 一个UI事件,Timer call, delegate call, 都会是一个新的Runloop

21.表情包素材链接

https://www.easyicon.net/iconsearch/%E8%A1%A8%E6%83%85%E5%8C%85%E3%80%81/3/?m=yes&f=_all&s=
http://aspx.sc.chinaz.com/query.aspx?keyword=%E5%9B%BE%E6%A0%87&issale=&classID=49&page=161

  • 补充:十分钟开发一款 iOS 表情包 App(https://juejin.im/post/5a32130bf265da43176a281f)

22.iOS学习之 plist文件的读写

https://blog.csdn.net/totogo2010/article/details/7634185

23.用masonry动态布局的时候,如果在一个数组里面创建多个按钮,一排最多3个按钮,怎么布局,在多少个未定的情况下?(使用到Masonry哪个属性)

http://www.cocoachina.com/articles/22551

24.bug之打包奔溃

场景:一开始系统选择13.5的进行pod操作,在选择9.0进行上传打包的时候报错。解决方法就是再重新选择9.0pod一遍,即可在9.0的时候进行上传打包

25.ViewController的生命周期

ViewController的生命周期

26.Xcode 新建文件时频繁崩溃

https://blog.csdn.net/qq_30513483/article/details/52098628
https://www.jianshu.com/p/55eb97ed5b83

27.好用第三方推荐

  • IGListKit 框架

Instagram在2016年年底发布了基于数据驱动的UICollectionView框架IGListKit。使用数据驱动去创造更为快速灵活的列表控件。以下是该框架的特点:
1.数据驱动(数据改变 -> Diff算法 -> update界面)
2.可重复单元和组件的更好体系结构
3.解耦的差异算法
4.可以为数据模型自定义差异算法
5.可扩展的API

https://www.jianshu.com/p/3517619085f7
用此实现朋友圈:https://www.jianshu.com/p/d52fe7059d92

  • 内存泄漏检测:pod 'FBRetainCycleDetector', :configurations => ['Debug']
  • 内存溢出:pod 'MLeaksFinder'
  • 个人常用iOS第三方库以及XCode插件介绍:http://www.cocoachina.com/articles/12503

28.不用写pch文件,直接h文件效果等同pch

开发问题笔记(十二)_第15张图片

29.如何将自己的库上传到CocoaPods

https://www.jianshu.com/p/3a8f7a1569bc

30.跳转淘宝商品详情与淘宝店铺(App+网页)

场景:有的需求会是一个H5链接,在H5链接里面有按钮可以交互跳转淘宝商品详情和淘宝店铺,根据详情id和店铺shop_id来跳转。在用户是否安装了淘宝App的判断上分为跳转淘宝App与跳转网页淘宝,商品详情和店铺的id可以打开淘宝分别获取他们的地址,在地址里面便可以看到对应的id的值,进而拿来测试,举例如下图。
相关链接:
https://blog.csdn.net/u014798232/article/details/79734354
http://www.vephp.com/jiaocheng/14660.html

开发问题笔记(十二)_第16张图片
知本家后台配置H5营销活动
App的H5页面
跳转后-网页淘宝详情
跳转后-网页淘宝App
1.// 淘宝商品详情页
NSURL *taobaoUrl = [NSURL URLWithString:[NSString stringWithFormat:@"taobao://item.taobao.com/item.htm?id=%@", detailId]];//id=61377079480
NSString *strWebUrl = [NSString stringWithFormat:@"https://item.taobao.com/item.htm?id=%@",detailId];
NSURL *webUrl = kUrl(strWebUrl);
        
 if ([[UIApplication sharedApplication] canOpenURL:taobaoUrl]) {// 能打开淘宝就打开淘宝
                 
       [[UIApplication sharedApplication] openURL:taobaoUrl];
  } else {// 浏览器中打开
                 
       [[UIApplication sharedApplication] openURL:webUrl];
  }

2.// 淘宝店铺
NSURL *taobaoUrl = [NSURL URLWithString:[NSString  stringWithFormat:@"taobao://shop.m.taobao.com/shop/shop_index.htm?shop_id=%@",detailId]];//shopId=59369908
NSString *strWebUrl = [NSString stringWithFormat:@"https://shop.m.taobao.com/shop/shop_index.htm?shop_id=%@",detailId];
NSURL *webUrl = kUrl(strWebUrl);
            
 if ([[UIApplication sharedApplication] canOpenURL:taobaoUrl]) {
                 
        [[UIApplication sharedApplication] openURL:taobaoUrl];
 } else {
                 
         [[UIApplication sharedApplication] openURL:webUrl];
 } 

你可能感兴趣的:(开发问题笔记(十二))