OC对象的内存布局

一、内存划分 介绍内存布局之前首先说一下内存的划分。OC程序的内存划分从高地址到低地址分别是栈区、堆区、全局区、常量区、代码区 1、栈区:存放局部变量和函数实参,iPhone的栈区是连续的空间,大小就几M,由系统管理 2、堆区:存放代码创建的对象,由开发者自己管理,非连续 3、全局区:存储全局变量和静态变量,由系统管理 4、常量区:存储常量字符串,由系统管理 5、代码区:存储二进制代码 ...

runtime应用

Runtime运行时是OC语言的一个特性,开发者可以在运行时中做甚多事情,下面主要介绍几种常用的应用,那就是获取类的实例变量、属性、方法列表。 创建一个用于测试的类,具体实现如下 //UserModel.h #import "Person.h" @interface UserModel : Person @property (nonatomic,strong) NSString *u...

消息转发经历了什么

unrecognized selector这个错误提示应该再熟悉不过了,我们都知道,OC的方法调用在运行时实际上是消息的发送。当程序向一个对象发送消息时,runtime会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找对应的方法运行。然而,如果在最顶层的父类中依然找不到相应的方法时,程序在运行时会崩溃并抛出异常unrecognized selecto...

基于融云实现应用公众号

好久没有研究融云相关的内容了,最近看到融云已经集成了公众号,有应用内的,也有接入第三方应用市场的。不得不说,融云在即时通讯这块内容做的已经很丰富了。这里没有打广告的意思,即时通讯SDK哪家强,仁者见仁智者见智,我不做对比。只是个人使用融云的产品较多,所以这里重点介绍基于融云的SDK实现应用内公众号服务。公众号消息的发送实际上应该是由应用服务器调用融云的接口来实现,这里采用的方式是客户端模拟服...

Xcode9报Invalid bitcode signature错误的解决方案

最近由于需要做iPhone X的适配工作,不得以升级了Xcode9和macOS High Sierra。升级后使用Xcode9编译原来的项目代码就出现了问题,会报一个Invalid bitcode signature的错误,经过多方查找问题,发现是pods的配置导致的,下面是解决方案 1、修改工程中pods的设置如下,可以参考原来Xcode8的工程配置 2、替换脚本 diff ...

浅谈iOS应用安全

之前一直以为iOS的应用保护机制多,算比较安全,可最近一个项目,由于特需原因需要做安全检测,看到报告我就傻眼了,所谓的安全,其实并不安全。下面就报告中的一些问题,给出一些修改建议 越狱检测 早几年前,苹果手机到手后,很多人第一件事想到的就是越狱,而那个时候,用户对信息安全还没有现在这么看重。你要问为什么要越狱?都会说“好玩啊,越狱之后能自定义很多东西~”。可以说,一直以来,越狱团队和苹果...

Cocoapods安装及使用

最近项目中在集成视频播放,采用了封装很优秀的开源播放器MobileVLCKit,这里使用的是V2.2.2版本。期间遇到了pods安装相当慢的问题,这里就记录一下cocoapods的安装方法和针对下载速度慢的pods项目如何处理 cocoapods安装 1、指定gem的源地址 //更换墙内地址 gem sources --add https://gems.ruby-china.org/ ...

__attribute__简析

__attribute__表示属性,是Clang提供的一种源码注释,方便开发者向编译器表达诉求,一般以__attribute__(***)的方式出现在代码中。为了方便使用,一些常用属性被定义成了宏,经常出现在系统头文件中。比如NS_CLASS_AVAILABLE_IOS(9_0) 就是 __attribute__(availability(9.0)) 这个属性的简单写法。下面介绍一些可能会频...

BLE开发之CoreBluetooth

一、前言 BLE,全称蓝牙低能耗(Bluetooth Low Energy)技术是低成本、短距离、可互操作的鲁棒性无线技术,工作在免许可的2.4GHz ISM射频频段,隶属于蓝牙4.0规范。它从一开始就设计为超低功耗(ULP)无线技术。它利用许多智能手段最大限度地降低功耗。蓝牙低能耗技术采用可变连接时间间隔,这个间隔根据具体应用可以设置为几毫秒到几秒不等。另外,因为BLE技术采用非常快速的...

问题随记

1、SDWebimage加载内存中的资源 如果你用SD加载了一个本地的图片资源,然后你又在程序中修改了改图片的内容,你会发现,就算你再次使用sd去加载图片资源,即使是在主线中去操作,imageView的图片也不会更改。这是因为sd默认是将资源加载到内存中的,代码修改只是修改了存储上的内容。用下面的方法即可解决。将加载的options设置为SDWebImageRefreshCached...