泛型在 Swift 中主要为增加代码的灵活性而生:它可以使得对应的代码满足任意类型的变量或方法。 Swift 有五个级别的访问控制权限,从高到底依次为比如 Open, Public, Internal, File-private, Private。 Swift 的内存管理机制与 Objective-C一样为 ARC(Automatic Reference Counting)。它的基本原理是,一个对象在没有任何强引用指向它时,其占用的内存会被回收。反之,只要有任何一个强引用指向该对象,它就会一直存在于内存中。
oc与js交互 ● 拦截url ● JavaScriptCore(只适用于UIWebView) ● WKScriptMessageHandler(只适用于WKWebView) ● WebViewJavaScriptBridge(第三方框架) map、filter、reduce?map与flapmap的区别? ● map:数组中每个元素都经过某个方法转换,最后返回新的数组(xx.map({$0 * $0})) ● flatmap:同map类似,区别在flatmap返回的数组不存在nil,并且会把optional解包;而且还可以把嵌套的数组打开变成一个([[1,2],[2,3,4],[5,6]] ->[1,2,2,3,4,5,6]) ● filter:用户筛选元素(xxx.filter({$0 > 25}),筛选出大于25的元素组成新数组) ● reduce:把数组元素组合计算为一个值,并接收初始值()
2.谈谈 Session,Token,Cookie 的概念 关键词:#用户认证 #客户端 #服务器端 • Session 是服务器端用来认证、追踪用户的数据结构。它通过判断客户端传来的信息确定用户,确定用户的唯一标识是客户端传来的 Session ID。 • Token 是服务器端生成的一串字符串,是客户端进行请求的令牌、服务器端用以确定用户的唯一标识。Session ID 就经常被用作 Token 来使用。Token的出现避免了服务器频繁的查询用户名和密码,降低了数据库的查询压力。 • Cookie 是客户端保存用户信息的机制。初次会话 HTTP 协议会在 Cookie 里记录一个 Session ID ,之后每次把 Session ID 发给服务器端。 • Session 一般用于用户验证。它默认存在服务器的一个文件里,当然内存、数据库里也可以存储。 • 若是客户端禁用了 Cookie,客户端会用 URL 重写技术,即会话时在 URL 的末尾加上 Session ID,并发送给服务器端。
实现直播过程共享屏幕分为两个步骤:屏幕数据采集和流媒体数据推送。前对于 iOS 来说,屏幕采集需要系统的权限,受制于 iOS 系统的限制,第三方 app 并没有直接录制屏幕的权限,必须通过系统的功能来实现。 本文将描述 iOS 系统的屏幕共享的应用、实现、限制、实现细节等方面调研结果。(注:由于 iOS 10 和之前的系统只支持 App 内录制屏幕,所以只做简单的介绍,不做详细说明)
如果你觉得 UITableViewDelegate 和 UITableViewDataSource 这两个协议中有大量方法每次都是复制粘贴,实现起来大同小异,看看这篇文章或许对你有所帮助
一、KVO的概念 ● KVO(Key Value Observing) 键值观察是苹果提供的一套事件通知机制,可以用于监听某个对象属性值的改变 ● KVO 不能监听成员变量 ● 与 NSNotificationCenter 一样,都是 iOS 观察者模式的一种实现。不同的是 KVO是一对一的,且一般情况下对被监听的对象无侵入性,不需要被监听对象修改代码。 ● 以 KVO 为模型慢慢衍生出来响应式编程的思想。 ● KVO 可以监听普通类型属性,也可以监听集合类型( NSArray / NSSet )的属性。 ● KVO 默认自动开启监听,也可以手动开启。 ● 注册与移除监听需要成对儿出现: ○ 如果重复移除监听,会报 NSRangeException 异常。 ○ 如果不移除,观察者释放后,再次发送 KVO 消息给它时,会报野指针的异常。 ○ 苹果官方推荐的方式是,在init的时候进行addObserver,在dealloc时removeObserver,这样可以保证add和remove是成对出现的,是一种比较理想的使用方式。
当CPU + GPU处理任务的时间 > 16.67 毫秒,就会出现掉帧现象。所以优化卡顿,要从CPU 、GPU两个方面入手。
手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性。iOS系统提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作。 ● UIPanGestureRecognizer(拖动) ● UIPinchGestureRecognizer(捏合) ● UIRotationGestureRecognizer(旋转) ● UITapGestureRecognizer(点按) ● UILongPressGestureRecognizer(长按) ● UISwipeGestureRecognizer(轻扫)
每一个UIView都有一个CALayer实例的图层属性,我们也可以通过UIView的layer属性访问这个图层。UIView的职责就是创建并管理这个图层,以确保当子视图在层级关系中添加或者被移除的时候,他们关联的图层也同样对应在层级关系树中执行相同的操作。
1. 字节对齐的原则 1.1 结构体或者联合体的数据成员,第一个成员的存储位置从0开始,之后的每个成员的存储起始位置均为该成员的大小的整数倍。 ● 根据这条原则,上面的 Mystruct1 中 ○ 成员 a 占 1 个字节, 从 0 的位置开始 ○ 成员 b 占 8 个字节,挨 0 + 1 最近的 8 的整数倍是8,所以 b 从 8 的位置开始 ○ 成员 c 占 4 个字节,挨 8 + 8 最近的 4 的整数倍是16,所以 c 从 16 的位置开始 ○ 成员 d 占 2 个字节,挨 16 + 4 最近的 2 的整数倍是20,所以 d 从 20 的位置开始 ○ 一共是占 22 个字节,8 字节对齐,一定要是8的倍数,不足要补齐,所以是 24 个字节
一个 HTTP 超时问题最近有同事反映我们的 app 在网络正常的情况下偶尔会出现请求超时。我的第一反应是某个服务挂掉了(因为最近服务端再搞重构),就反馈给了服务层。但是服务层的同事排查下来发现 api 层并没有产生异常日志,应该不是服务本身或者依赖的中台服务挂掉了。定位想起来 NSURLSession 有个默认的单个Host最大连接数,超过之后会进入排队,可能导致后续服务超时。Objective
一、@synthesize & dynamic runtimer方法@synthesize: 修改变量名字,自动生成set和get并赋值.在以前的版本是没有自动生成set和get方法,往往定义一个变量,我们需要加这个东西,现在很少用;@dynamic:提醒编译器不要自动生成setter和getter方法、不要自动生成成员变量;@dynamic与@synthesize的区别@property
“我在秒杀iPhone XS的支付页面卡了3秒,最后没抢到”,用户嘶声力竭地反馈了一个卡顿问题。“莫慌莫慌”,等我打开Android Studio, 用上一讲学到的几个工具分析一下就知道原因了。“咦,在我这里整个支付过程丝滑般流畅”。这个经历让我明白,卡顿跟崩溃一样需要“现场信息”。因为卡顿的产生也是依赖很多因素,比如用户的系统版本、CPU负载、网络环境、应用数据等。脱离这个现场,我们本地难以复现
ArrayList和LinkedList在新增、删除元素时,LinkedList的效率要高于 ArrayList,而在遍历的时候,ArrayList的效率要高于LinkedList。
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号