iOS
文章平均质量分 56
iOS 技术总结专栏
GSNICE-2019
这个作者很懒,什么都没留下…
展开
-
iOS 计步器的几种实现方式
概述这是一篇介绍两种可以获取计步数据的方法的文章,一种是采用CMPedometer获取手机计步器数据,另一种是采用 HealthKit 框架从手机健康 App 中获取计步数据。另外也可以写入数据到健康 App。花絮用 HealthKit 框架构建 App,写入数据到苹果健康 App中,QQ 和 Keep 等第三方 App 的运动数据都会随之改变,猜测它们的运动数据是直接从苹果健康 App 中获取,而且没有过滤掉其它数据来源。而微信运动的数据不会变,猜测其来源可能是使用 CMPedometer 类获取的原创 2021-05-15 21:47:50 · 1314 阅读 · 4 评论 -
“位运算”助力高性能开发
0x00 -- 位运算概览符号 描述 运算规则 & 按位与 2个位都为1,结果为1 | 按位或 一个位为1,结果为1 ^ 按位异或 相同为0,相异为1 ~ 按位取反 1变0,0变1 <<n 左移 各二进位全部左移n位,高位丢弃,低位补0 >>n 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(原创 2020-11-22 17:54:03 · 758 阅读 · 0 评论 -
iOS:解出线上app中 Assets.car 的图片资源
首先到github下载cartool(没错,这就是我们即将用来取图片的神器),地址:https://github.com/GSNICE/cartool,下载好之后,解压看后打开 cartool.xcodeproj 文件,在打开的 XCode 项目中进入 Edit Scheme。之后按照下图中的操作顺序进行:注意点:Assets.car文件路径和存储图片的文件夹的文件路径顺序是固定的,Assets.car 在第一个,文件夹在第二个,如果写反就出错了,切记切记!选择 Run。选择 Arguments原创 2020-08-11 14:26:47 · 3414 阅读 · 1 评论 -
iOS:class_copyPropertyList 与 class_copyIvarList 区别
class_copyPropertyList 返回的仅仅是对象类的属性( @property 申明的属性),而 class_copyIvarList 返回类的所有属性和变量(包括在 @interface 大括号中声明的变量),下面做个简单的测试。首先,定义一个 Man 类 :@interface Man : NSObject{ NSString *IDCard; NSString *birthday; NSString *hobby;}@property (nonato原创 2020-07-30 17:41:59 · 2753 阅读 · 0 评论 -
iOS:Tableview 性能优化
Tableview 性能优化Tableview 性能优化方法总览Tableview 懒加载、Cell 重用高度缓存(因为 heightForRowAtIndexPath: 是调用最频繁的方法)当 cell 的行高固定时,使用固定行高 self.tableView.rowHeight = 88;当 cell 的行高是不固定时,根据内容进行计算后缓存起来使用。第一次肯定会计算,后续使用缓存时就避免了多次计算;高度的计算方法通常写在自定义的cell中,调用时,既可以在设置 cell 高的代理方法中使转载 2020-07-29 09:18:30 · 3784 阅读 · 0 评论 -
iOS:打包静态库以及 C、C++、OC 的混编
一、打包静态库创建一个名为GenerateStaticLibrary(名称可以自主命名)的静态库工程删除自动生成的GenerateStaticLibrary.h和GenerateStaticLibrary.m文件导入或新建静态库的代码(我这里新建了 C 文件和 C++ 文件)如果需要 C++ 混编,需要修改Compile Sources As为Objective-C++,否则在导入静态库的项目中混编 C++ 代码时,编译器报错修改Product->Scheme->Edit S原创 2020-07-14 14:16:30 · 3535 阅读 · 0 评论 -
带你打造一套 APM 监控系统(四)
七、 Crash 监控1. 异常相关知识回顾1.1 Mach 层对异常的处理Mach 在消息传递基础上实现了一套独特的异常处理方法。Mach 异常处理在设计时考虑到:带有一致的语义的单一异常处理设施:Mach 只提供一个异常处理机制用于处理所有类型的异常(包括用户定义的异常、平台无关的异常以及平台特定的异常)。根据异常类型进行分组,具体的平台可以定义具体的子类型。清晰和简洁:异常处理的接口依赖于 Mach 已有的具有良好定义的消息和端口架构,因此非常优雅(不会影响效率)。这就允许调试器和外部处转载 2020-07-14 11:07:34 · 5828 阅读 · 0 评论 -
带你打造一套 APM 监控系统(三)
五、 App 网络监控移动网络环境一直很复杂,WIFI、2G、3G、4G、5G 等,用户使用 App 的过程中可能在这几种类型之间切换,这也是移动网络和传统网络间的一个区别,被称为「Connection Migration」。此外还存在 DNS 解析缓慢、失败率高、运营商劫持等问题。用户在使用 App 时因为某些原因导致体验很差,要想针对网络情况进行改善,必须有清晰的监控手段。1. App 网络请求过程App 发送一次网络请求一般会经历下面几个关键步骤:DNS 解析Domain Name s转载 2020-07-14 11:07:14 · 2004 阅读 · 0 评论 -
带你打造一套 APM 监控系统(二)
三、 CPU 使用率监控1. CPU 架构CPU(Central Processing Unit)中央处理器,市场上主流的架构有 ARM(arm64)、Intel(x86)、AMD 等。其中 Intel 使用 CISC(Complex Instruction Set Computer),ARM 使用 RISC(Reduced Instruction Set Computer)。区别在于不同的 CPU 设计理念和方法。早期 CPU 全部是 CISC 架构,设计目的是用最少的机器语言指令来完成所需的计算任转载 2020-07-14 11:06:53 · 2020 阅读 · 0 评论 -
带你打造一套 APM 监控系统(一)
APM 是 Application Performance Monitoring 的缩写,监视和管理软件应用程序的性能和可用性。应用性能管理对一个应用的持续稳定运行至关重要。所以这篇文章就从一个 iOS App 的性能管理的纬度谈谈如何精确监控以及数据如何上报等技术点App 的性能问题是影响用户体验的重要因素之一。性能问题主要包含:Crash、网络请求错误或者超时、UI 响应速度慢、主线程卡顿、CPU 和内存使用率高、耗电量大等等。大多数的问题原因在于开发者错误地使用了线程锁、系统函数、编程规范问题、.转载 2020-07-14 11:06:31 · 2342 阅读 · 0 评论 -
iOS:蓝牙通讯中的进制转换
在处理蓝牙数据的时候,经常遇到进制之间的转换,蓝牙处理的是16进制(NSData),而我们习惯的计数方式是10进制,为了节省空间,蓝牙也会把16进制(NSData)拆成2进制记录。这里我们研究下如何在他们之间进行转换。假设我们要向蓝牙发送 0x1B9901 这条数据Byte 转 NSDataByte value[3]={0};value[0]=0x1B;value[1]=0x99;value[2]=0x01;NSData * data = [NSData dataWithBytes:&am.原创 2020-06-27 11:48:08 · 1390 阅读 · 0 评论 -
蓝牙设备固件升级
1. 升级介绍蓝牙固件升级是使用手机给固件进行更新,以达到修复 bug 的目的,完善功能的作用。升级的大概流程是:当蓝牙设备的固件需要升级时,由嵌入式开发人员提供新的固件,由服务器管理人员将固件放到服务器上。用户打开手机 APP 的时候会检测到服务器有更新,请求更新蓝牙设备固件,确认更新后,手机会从服务器下载固件。下载完毕后,APP 会读取固件内容,并根据升级协议将内容传到蓝牙设备里,完成升级。DFU = Device Firmware Update (设备固件更新)OTA = Ov.转载 2020-06-27 09:20:55 · 13489 阅读 · 0 评论 -
iOS:蓝牙通讯开发快速上手
目录思维导图苹果对蓝牙设备的要求操作蓝牙设备使用的库如何扫描如何连接如何发送数据和接收数据如何解析数据扩展1. 思维导图蓝牙知识的结构图蓝牙数据通讯流程图2. 苹果对蓝牙设备的要求BLE:bluetouch low energy,蓝牙4.0设备因为低功耗,所有也叫作 BLE。苹果在 iPhone 4s 及之后的手机型号开始支持蓝牙 4.0,这也是最常见的蓝牙设备。低于蓝牙 4.0 协议的设备需要进行 MFI 认证。在进行操作蓝牙设备前,我们先下载一个蓝牙工具 LightBlu原创 2020-06-27 07:12:37 · 1715 阅读 · 0 评论 -
iOS几个关键字(nonnull、nullable、null_resettable、__null_unspecified)
1、nonnull:字面意思就能知道:不能为空(用来修饰属性,或者方法的参数,方法的返回值)代码: // 三种使用方式都可以 @property (nonatomic, copy, nonnull) NSString *name; @property (nonatomic, copy) NSString * _Nonnull name; @property (nonatomic, copy) NSString * __nonnull name; // 补充(不适用于assign属原创 2020-06-25 22:24:26 · 3112 阅读 · 0 评论 -
2020 年 iOS 移动开发最新发展趋势
作者 | Twinkle来源 | Mobile App Daily就像不时出现的移动技术趋势一样,了解 iOS 移动开发趋势也有重大的意义。随着 iOS 应用程序总数接近 200 万大关,与最新的iOS应用程序开发趋势保持同步已成为社区的常态。根据最新数据,大约有400万个应用程序可供用户使用。对于用户来说,这意味着他们几乎所有需求都能找到一系列应用程序。从开发人员的角度来看,应用程序商店中的应用程序数量越多,他们越需要与最新动态保持同步。我们的博客面向所有希望了解最新移动应用程序开...翻译 2020-05-09 12:52:36 · 7168 阅读 · 0 评论 -
iOS:浅谈视图优化
引言:让我们来思考几个问题,你开发过的产品,它还有可以优化的地方吗?能增加它的帧率吗?能减少多余的CPU计算吗?是不是存在多余的GPU渲染?业务这点工作量对于越来越强大的设备面前显得微不足道,但作为一个细心的开发者,我觉得很有必要来谈谈iOS中的视图优化。本文从开发者最容易犯错的地方出发,结合例子,从以下几个角度阐述如何进行视图优化:Color Blended LayersColor...转载 2020-04-27 15:51:26 · 681 阅读 · 0 评论 -
iOS:weak 底层实现原理
一、weak 基本用法weak 是弱引用,用 weak 来修饰、描述所引用对象的计数器并不会增加,而且 weak 会在引用对象被释放的时候自动置为 nil,这也就避免了野指针访问坏内存而引起奔溃的情况,另外 weak 也可以解决循环引用。拓展:为什么修饰代理使用 weak 而不是用 assign?assign 可用来修饰基本数据类型,也可修饰 OC 的对象,但如果用 assign 修饰对象类...原创 2020-04-22 21:46:15 · 5268 阅读 · 0 评论 -
iOS:使用 Apple Configurator 获取 ipa 包及资源文件
软件下载在 App Store 搜索下载【Apple Configurator】的 App。登录 Apple ID把 iPhone 连接上 Mac,点击顶部菜单栏中的 账户选择 登录 (用连接设备的 Apple ID 进行登录)。注意:需要下载的 App 需要在登录过的 Apple ID 下购买安装过才可以。注意:备份iPhone的内容(避免数据丢失,非必选)查找需要下载的 Ap...原创 2020-04-21 22:07:58 · 5028 阅读 · 0 评论 -
iOS:GPUImage 简介及滤镜
GPUImage 是一个开元的基于 GPU 的图片或视频的处理框架,其本身内置了多达 120 多种常见的滤镜效果,并且支持照相机和摄像机的实时滤镜,并且能够自定义图像滤镜。美颜的基本概念OpenGL ES: 开源嵌入式系统图形的处理框架,一套图形与硬件接口,创造了软件与图形加速间灵活强大的底层交互接口。用于把处理好的图片显示到屏幕上。GPU: (图形处理单元)手机或者电脑用于图像处理和渲染的...原创 2020-04-14 23:06:18 · 2322 阅读 · 0 评论 -
iOS:App 编译和启动原理
编译原理:将编译过程分为前端和后端两部分处理Clang(编译器前端):GCC的替代品,Clang的编译速度比GCC快1.Lexer:读入源文件,并将其转化成字符流。2.Parser:将字符流转换成AST(抽象语法树)。3.SemanticAnalysis:对输入的AST进行语法检查。4. Code Generation:代码生成,将AST转换成低层次的IR指令。LLVM(编译器后端)...原创 2020-04-14 15:23:45 · 1284 阅读 · 0 评论 -
iOS:Core Motion 框架的介绍和使用
在iOS4之前,加速度计由UIAccelerometer类来负责采集工作,而电子罗盘则由Core Location接管。而iPhone4的推出,由于加速度计的升级(有消息说使用的是这款芯片) 和陀螺仪的引入,与motion相关的编程成为重头戏,所以,苹果在iOS4中增加一个一个专门负责该方面处理的框架,就是Core Motion Framework。这个Core Motion有什么好...原创 2014-05-09 19:50:00 · 551 阅读 · 0 评论 -
iOS:晃动手势
让当前的程序 检测手机晃动的方法大体上有两种: 第一种方法就是重写UIResponder类下的手势方法(可以用模拟器模拟); 第二种方法就是利用Accelerometer来检测手机是否晃动(只能用真机测试)。第一种方法: 很简单只需三个步骤:让当前ViewController支持晃动手势,让当前的View成为第一响应者,重写UIResponder中支持晃...原创 2014-05-09 19:59:00 · 351 阅读 · 0 评论 -
iOS:MPMoviePlayerController 视频播放器
首先引入 MediaPlayer.framework。然后在使用到MPMoviePlayerController 的文件中导入相应的头文件。一、创建 MPMoviePlayerController 类通过一个NSURL来初始化,这个URL可以是本地的,也可以是远程的。初始化需要通过 initWithContentURL 方法来实现://远程 urlMPMoviePlay...原创 2014-05-10 09:38:00 · 332 阅读 · 0 评论 -
iOS:CAShapeLayer 图片圆形效果
利用CAShapeLayer可以制作出任意的几何图形,把它作为UIImageView的遮罩,达到把图片做成圆形效果。 1 //创建个人主页头部的用户头像 2 self.userHead = [[UIImageView alloc]initWithFrame:CGRectMake(10, 35, 80, 80)]; 3 self.userHead.image = [UII...原创 2014-05-10 14:52:00 · 428 阅读 · 0 评论 -
iOS:时区日期处理及定时 (NSDate,NSCalendar,NSTimer,NSTimeZone)
NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间Dates NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能。Date对象是不可改变的。 如果你要创建date对象并表示当前日期,你可以alloc一个NSDate对象并调用init初始化:NSDate *now = [[NSDate alloc...原创 2014-05-10 15:15:00 · 403 阅读 · 0 评论 -
iOS:UIView非常有用方法及属性详解
在调用视图的drawRect:方法之前,UIKit 会自动对描画环境进行配置,使左上角成为坐标系统的原点,在这个环境中发生的Quartz调用都可以正确地在视图中描画。 视图对象通过frame、bounds、和center属性声明来跟踪自己的大小和位置。frame 属性包含一个矩形,即边框矩形,用于指定视图相对于其父视图坐标系统的位置和大小。 bounds 属...原创 2014-05-10 19:42:00 · 325 阅读 · 0 评论 -
iOS:第三方库之数据库类库 FMDB
下载地址:https://github.com/tryingx/fmdb-master前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库。iOS SDK很早就支持了SQLite,在使用时,只需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。但是,原生的SQLite API在...原创 2014-05-10 21:22:00 · 368 阅读 · 0 评论 -
iOS:Auto Layout 的使用
引言: Auto Layout是iOS6发布后引入的一个全新的布局特性,其目的是弥补以往autoresizing在布局方面的不足之处,以及未来面对更多尺寸适配时界面布局可以更好的适应. 要完全掌握Auto Layout是一件非常消耗精力的事情,需要大量的实践,并且在根本上面,理解其如何使用,如果要全面的介绍Auto Layout和使用场景估计几篇博文都介绍不完,本文希望能将使...原创 2014-05-10 22:07:00 · 396 阅读 · 0 评论 -
iOS:-retain/assign/strong/weak/copy/mutablecopy/autorelease 区别
readwrite:可读可写特性,需要生成getter和setter方法;readonly:只读特性,只会生成getter方法,不会生成setter方法,不希望属性在类外改变时候使用;alloc:对象分配后引用计数为1;copy:一个对象变成新的对象(新内存地址) 引用计数为1,原来对象计数不变;assign:是赋值特性,setter方法将传入参数赋值给实例变量(一把钥匙...原创 2014-05-10 23:35:00 · 315 阅读 · 0 评论 -
iOS:引导页实现
Demo下载链接地址:https://github.com/tryingx/iPhone-IntroductionTutorial1.把下载的demo中的MYIntroductionView.h MYIntroductionView.mMYIntroductionPanel.hMYIntroductionPanel.m这四个文件,再加上一些图像资源加到你的工...原创 2014-05-10 23:51:00 · 305 阅读 · 0 评论 -
iOS:获取手机相关信息
UIDevice是无法获得具体的设备型号的。1.引入头文件。 #include<sys/types.h> #include<sys/sysctl.h>2.获取型号1 //手机型号。2 size_t size;3 sysctlbyname("hw.machine", NULL, &size, NULL, 0);...原创 2014-05-10 23:56:00 · 354 阅读 · 0 评论 -
iOS:UILabel 光晕文字效果
1、新建一个基于UILabel的子类2、在这个子类中定义red、green、blue三个颜色值变量和一个发光光晕范围变量size。3、复写UILable的drawTextInRect方法,并使用CGContextRef来进行光晕效果绘制。基本思路就是这样子了,下面是部分主要代码:.h文件 1 //创建UILable的子类 GlowLable 2 @inte...原创 2014-05-11 16:51:00 · 713 阅读 · 0 评论 -
iOS:CFStringTransform 将汉字转换为拼音
iOS在CoreFoundation中提供了CFStringTransform函数,但在Foundation中却没有相对应的方法。它的定义如下:Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse);其中stri...原创 2014-05-11 20:41:00 · 325 阅读 · 0 评论 -
iOS:读取图片 Demo
在Iphone上有两种读取图片数据的简单方法: UIImageJPEGRepresentation和UIImagePNGRepresentation.UIImageJPEGRepresentation函数需要两个参数:图片的引用和压缩系数。而UIImagePNGRepresentation只需要图片引用作为参数.通过在实际使用过程中,比较发现: UIImagePNGRepr...原创 2014-05-12 00:34:00 · 330 阅读 · 0 评论 -
iOS:Xcode 修改项目名称
总会遇到几个项目,在做到一半的时候被要求改项目名,网上找了下相关的资料,大多数是xcode5以前的版本,所以解决好了在这里mark一下,给需要的人。目标为:将项目名XCD4改成xcd5。 先上结果图:==》1.在左侧的导航区域点击两次项目名,两次间隔时间稍微长些,项目名会变成可编辑状态。将名称修改为xcd5后按enter键弹出一个对话框,这个时候放...原创 2014-05-28 14:22:00 · 470 阅读 · 0 评论 -
iOS:UIRefreshControl 使用介绍
1、使用范围如果你装了xcode_4.5_developer_preview,那么在UITableViewController.h文件中你会看到,UITableViewController里面有如下声明,说明UITableViewController已经内置了UIRefreshControl控件@property (nonatomic,retain) UIRefreshC...原创 2014-05-27 08:47:00 · 345 阅读 · 0 评论 -
iOS:MPMoviePlayerController 使用说明
MPMoviePlayerController 与AVAudioPlayer有点类似,前者播放视频,后者播放音频,不过也有很大不同,MPMoviePlayerController 可以直接通过远程URL初始化,而AVAudioPlayer则不可以。不过大体上用起来感觉差不多。废话少说进入体验。格式支持:MOV、MP4、M4V、与3GP等格式,还支持多种音频格式。首先你得引入 ...原创 2014-05-18 01:31:00 · 460 阅读 · 0 评论 -
iOS:Grand Central Dispatch (GCD)简介
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。dispatch queue分成以下三种:1)运行在主线程的Main queue,通过dispatch_get_main_queue获取。 1 /*! 2 * @function dispatch_get_main_queue 3 * 4 * @abstract...原创 2014-05-12 00:51:00 · 304 阅读 · 0 评论 -
iOS:MapKit 使用说明
iPhone SDK提供了三个类来管理位置信息:CLLocation CLLocationManager 和 CLLHeading(不常用)。除了使用GPS来获取当前的位置信息外,iPhone也可以基于WiFi基站和无线发射塔来获得位置信息。GPS的精度最高,可以精确到米级别,但是也最耗电。------------CLLocationCLLocation类代表一个位置信息,其中还...原创 2014-05-12 00:43:00 · 363 阅读 · 0 评论 -
iOS:设备推送通知服务编程
-译自 weimenglee 的Programming ApplePush Notification ServicesiPhone 对于应用程序在后台运行有诸多限制(除非你越狱)。因此,当用户切换到其他程序后,原先的程序无法保持运行状态。对于那些需要保持持续连接状态的应用程序(比如社区网络应用),将不能收到实时的信息。为解决这一限制,苹果推出了APNs(苹果推送通知服务)。APN...原创 2014-07-01 09:52:00 · 297 阅读 · 0 评论