iOS 边学边记 autorelease 和 @autoreleasepool-爱代码爱编程
前言 作为 iOS 开发者,在面试过程中经常会碰到这样一个问题:在 ARC 环境下autorelease对象在什么时候释放?如果你还不知道怎么回答,或者你只有比较模糊的概念,那么你绝对不能错过本文。 本文将通过Runtime objc4-756.2版本源码、macOS 与 iOS 工程示例来分析@autoreleasepool的底层原理。并在最后针对有关
代码编织梦想
前言 作为 iOS 开发者,在面试过程中经常会碰到这样一个问题:在 ARC 环境下autorelease对象在什么时候释放?如果你还不知道怎么回答,或者你只有比较模糊的概念,那么你绝对不能错过本文。 本文将通过Runtime objc4-756.2版本源码、macOS 与 iOS 工程示例来分析@autoreleasepool的底层原理。并在最后针对有关
本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机。主要内容如下: 引言简介与 Runtime 交互Runtime 基础数据结构消息动态方法解析消息转发健壮的实例变量 (Non Fragile ivars)Objective-C Associated Obj
一、GCD简介 Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。 它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。是一个在线程池模式的基础上执行的并发任务 为什么要用 GCD 呢? GCD 可用于多核的并行运算GCD 会自动利用更多的 CPU 内核(比如双核、四核)GCD
iOS开发者都知道,当一个对象被释放时,所有对这个对象弱引用的指针都会释放并置为nil,那么系统是如何存储这些弱引用对象的呢?又是如何在一个对象释放时,将这些指向即将释放对象的弱引用的指针置为nil的呢?下面我们通过分析SideTable的结构来进一步了解内存管理的弱引用存储细节。 weak结构 在runtime中,有四个数据结构非常重要,分别是Sid
正文 接 Weak的实现(二) 3 设置弱引用标志位 inline void objc_object::setWeaklyReferenced_nolock() { retry: //去对象的isa指针 isa_t oldisa = LoadExclusive(&isa.bits); isa_t newisa = ol
正文 接 Weak的实现(一) 2 生成新的weak_entry_t插入到weak_entries中 /** * Registers a new (object, weak pointer) pair. Creates a new weak * object entry if it does not exist. * * @param we
本文较长分三篇按序阅读体验更佳,第四篇为辅助阅读按需看 1.Weak的实现(一) 2.Weak的实现(二) 3.Weak的实现(三) 4.Weak的实现-&SideTables()[oldObj] 带着问题看源码: 1.大家都知道weak的底层实现是一个散列表,那么散列表的结构是什么样的? 2.散列表的key是什么,value是什么,散列函数是怎
先看看苹果官方文档对这连个的方法的解释: // return 'best' size to fit given size. does not actually resize view. Default is return existing view size - (CGSize)sizeThatFits:(CGSize)size; // call
首先,NSSet和NSArray功能性质一样,用于存储对象,属于集合。但是和NAArray不一样的是它属于 “无序集合”,在内存中存储方式是不连续的,而NSArray是 “有序集合” 它内存中存储位置是连续的。 其次,NSSet的效率确实是比NSArray高的,因为它主要用的是hash算法,我的理解中,NSSet在集合中寻找一个元素的时候是一针见血,找到
一、首页启动速度 启动过程中做的事情越少越好(尽可能将多个接口合并)。不在UI线程上作耗时的操作(数据的处理在子线程进行,处理完通知主线程刷新节目)。在合适的时机开始后台任务(例如在用户指引节目就可以开始准备加载的数据)。尽量减小包的大小。优化方法: 量化启动时间启动速度模块化辅助工具(友盟,听云,Flurry)二、页面浏览速度 json的处理(iO
前言 很多时候我们做APP,不是完成相关的功能就行,很多时候需要我们不断的进行优化,特别对于像淘宝和微信等巨型app来说,如果没有优化,那会是什么样的结果,一定会有很多人“脱坑”,又何谈发展啊。 下面我们就说一下iOS性能优化。 一、 用ARC管理内存 ARC和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露。它自
(1) 在 Mac OS 中 NSWindow 的父类是 NSResponder,而在 iOS 中 UIWindow 的父类是 UIVIew。程序一般只有一个窗口但是会有很多视图。 (2) UIView 的作用:负责对其所属的矩形区域描画、布局和子视图管理、事件处理、可以接收触摸事件、事件信息的载体、等等。 (3) UIViewController:负
互联网技术的本质就是通信协议,各种通信协议将各种终端连接了起来。流媒体协议是建立在互联网TCP/IP协议上的多媒体数据流传输分发协议。它主要为主播端和观众端提供数据传输和分发的解决方案。 现在互联网上的流数据占据带宽的大部分,音频、短视频、长视频占据了互联网应用的主流。数据流通过传输技术被运来运去,那么流数据遵循哪些传输规则和协议呢,各个协议有什么优缺点
什么是SRT协议? 概述 SRT协议是基于UDT的传输协议,保留了UDT的核心思想和机制,抗丢包能力强,适用于复杂的网络。在LiveVideoStack线上分享中,新浪音视频架构师 施维对SRT协议的原理、优缺点特性以及在流媒体中的应用进行了详细解析。 UDT UDT是基于UDP的数据传输协议(UDP-based Data Transfer Pro
一、概述 RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。 握手、消息块概念 握手的目的是为了确认对端RTMP的Version和确认对端能互相通信。消息块就是消
移动直播技术优化探究 现今移动直播技术上的挑战要远远难于传统设备或电脑直播,其完整的处理环节包括但不限于:音视频采集、美颜/滤镜/特效处理、编码、封包、推流、转码、分发、解码/渲染/播放。 直播常见的问题包括 主播在不稳定的网络环境下如何稳定推流?偏远地区的观众如何高清流畅观看直播?直播卡顿时如何智能切换线路?如何精确度量直播质量指标并实时调整?移动
1、什么是核心动画Core Animation(核心动画)是一组功能强大、效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用。 核心动画所在的位置如下图所示: 可以看到,核心动画位于UIKit的下一层,相比UIView动画,它可以实现更复杂的动画效果。 核心动画作用在CALayer(Core animation layer)上
## 一、position和anchorPoint 1、CALayer有2个非常重要的属性:position和anchorPoint @property CGPoint position;用来设置CALayer在父层中的位置以父层的左上角为原点(0, 0)@property CGPoint anchorPoint;称为“定位点”、“锚点”决定着CALay
m3u8文件格式与mp4之间有什么区别 .m3u8是一种非常特殊的文件格式,很多朋友都知道m3u8是可以用于视频播放的,那么它与传统的视频文件Mp4究竟有什么区别么,想要了解请往下看! M3U8视频格格式其实是一种M3U,只是它的编码格式是UTF-8格式。M3U用Latin-1字符集编码。M3U8格式特点是带有一个目录信息或文件。 MP4视频文件 即
1.HLS综述 谈HLS 就不得不谈苹果,谈苹果就不得不提乔帮主。HLS就是“HTTP Live Streaming”的缩写,它诞生自2009年,QuickTime和iPhone3GS黄金搭档下的一个标准,一个意在颠覆流媒体产业的新协议。 它的工作原理简单来说就是把一段视频流,分成一个个小的基于HTTP的文件来下载。当媒体流正在播放时,客户端可以根据当