![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
博客
虚心学习的HZK
莫道先行早,更有先行人
展开
-
iOS-SDK从0到1
学有所出: 个人觉得,学习,不管是哪一门学科,那个行业,最好的学习方法就是学有所出。带着目的去学习,要求自己学了某个东西一定最后能有个产出。可以是一篇学习心得,发表一篇科技论文;也可以是将自己所学的新东西与以往的东西融汇贯通,比方说,学习了某个新技术,然后集成到自己的工程中;当然,产出也可以是具体的某个实物,一个APP或是一个创新发明。学有说出,带着这个信念和目的,不仅我们的学习过程...原创 2018-10-10 11:57:20 · 177 阅读 · 0 评论 -
iOS获取手指点击背景图的坐标的颜色(亲测,不需要关心UIImageView的frame是否跟图片大小一样)
公司最近要做一个拾色器,就是自己手动选择一张图片,获取手指点击的哪一个点的颜色,然后跳转其他页面,做颜色调试.思考的问题:1.刚接到这需求的时候,在网上搜了一下方法,获取点击点的颜色方法很多,但是都有一个弊端,就是一定要求,UIImageView的frame一定要跟图片一样,才能准确获取点得色彩.2.因为还需要对图片做缩放的功能,考虑到可以把图片放到scrollView和在图片上添原创 2018-01-23 16:48:04 · 615 阅读 · 0 评论 -
Xcode9.2的坑
问题描述:升级Xcode9.2后,跑在iOS 8系统上出现图片显示错乱的情况目前还没找到原因,详情可看:https://juejin.im/post/5a30f9e2f265da430f3217d0。目前的解决办法就是:降级Xocde或者等待更新.原创 2018-01-03 16:26:36 · 3370 阅读 · 0 评论 -
利用AFN上传图片(多张)
#pragma mark 上传图片 + (void)uploadImageWithPath:(NSString *)path photos:(NSArray *)photos params:(NSDictionary *)params success:(HttpUploadSuccessBlock)success failure:(HttpUploadFailureBlock)failure原创 2018-01-11 09:08:36 · 1977 阅读 · 0 评论 -
关于声明属性Strong还是Copy的用法
对于属性声明时,尤其是对NSString的声明,不知道该用strong还是copy,也不清楚二者之间具体有何区别?接下来,我将从两方面来介绍下strong和copy的区别,分别是可变和不可变。1.操作不可变对象的时候:// 定义一个Person类@interface Person : NSObject@property (nonatomic, strong) NSArray *a原创 2017-08-31 15:00:25 · 382 阅读 · 0 评论 -
创建带文字的图片
创建带文字的图片-(UIImage *)addText:(UIImage *)img text:(NSString *)text1{ //上下文的大小 int w = img.size.width; int h = img.size.height; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceR原创 2017-08-30 14:36:30 · 332 阅读 · 0 评论 -
照片选择器封装(swift3.0+)
这是一个swift封装的照片选择器,包含了照片选择和拍照,支持裁剪class PhotoPicker: NSObject,UIImagePickerControllerDelegate,UINavigationControllerDelegate{ weak var vc : UIViewController? var callBack : ((_ image: UI原创 2017-08-30 14:11:39 · 639 阅读 · 0 评论 -
关于GCD的一些函数
1.一次性代码(多用于单例)1>只执行一次,创建了到销毁都只会执行一次 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"once"); });2.延迟执行1>关于延迟执行,有三种方式可以实现a.performSelectorb.定时器c.gc原创 2017-08-29 14:26:56 · 482 阅读 · 0 评论 -
自定义模型转字典,字典转模型
//MARK - 通过字符串获取类extension NSObject{ /** - parameter className: 通过字符串获取类 - returns: 类 */ class func ClassFromString(_ str: String) -> AnyClass! { if var ap原创 2017-08-29 10:30:40 · 411 阅读 · 0 评论 -
iOS-Carthage 安装以及使用 (新版本)
想到iOS/OS X项目的依赖管理,第一个想到的一定是大名鼎鼎的CocoaPods。下面是Carthage介绍里面的讲述两者的不同之处:CocoaPods (默认)自动建立和更新一个Xcode workspace,用来管理你的项目和所有依赖。Carthage使用xcodebuild来编译出二进制库,剩下的集成工作完全交给开发人员。CocoaPods使用起来方便,Carthage更加灵活并且翻译 2018-01-24 10:52:49 · 9198 阅读 · 0 评论 -
SDWebImage源码解读
目录简介设计目的特性SDWebImage 与其他框架的对比常见问题用法SDWebImage 4.0 迁移指南实现原理架构图流程图目录结构核心逻辑实现细节1. 图片下载1.1 SDWebImageDownloader1.2 SDWebImageDownloader2. 图片缓存——SDImageCache3. 图片加载管理器——SDWebImage转载 2018-02-06 09:40:56 · 555 阅读 · 0 评论 -
iOS逆向 ipa包重签名
如果你想把一个ipa文件安装到自己的手机上(别人发你的或者从第三方商店下载的…)你的手机如果没有越狱是无法正常安装的(排除企业证书分发), 我们可以通过为ipa重签名实现,原理是将我们自己的证书打进ipa。朋友发给了我一个用于上架的ipa包,现在我来做个测试,把这个上架appstote的包进行重签名,用我自己的证书进行签名,然后安装到我手机中。为了证明这是一个准备上...翻译 2018-06-26 11:51:33 · 2371 阅读 · 1 评论 -
class-dump安装与使用
class-dump安装与使用简介class-dump is a command-line utility for examining the Objective-C segment of Mach-O files. It generates declarations for the classes, categories and protocols. This is the same infor...转载 2018-06-19 10:29:08 · 3705 阅读 · 0 评论 -
iOS多线程:『GCD』详尽总结
本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法。这大概是史上最详细、清晰的关于 GCD 的详细讲解+总结的文章了。通过本文,您将了解到:1. GCD 简介2. GCD 任务和队列3. GCD 的使用步骤4. GCD 的基本使用(6种不同组合区别)5. GCD 线程间的通信6. GCD 的其他方法(栅栏方法:dispatch_barrier_async、延时执行方法:dispatc...转载 2018-05-16 17:11:52 · 168 阅读 · 0 评论 -
App性能优化
导语本文介绍了如何优化 iOS App 的启动性能,分为四个部分:第一部分科普了一些和App启动性能相关的前置知识第二部分主要讲如何定制启动性能的优化目标第三部分通过在WiFi管家这个具体项目的优化过程,分享一些有用的经验第四部分是关键点的总结。【第一部分】一些小科普因为篇幅的限制,没有办法很详尽的说明一些原理性的东西,只是方便大家了解哪些事情可能跟启动性能有关。同时,内容相对也比较入门,大神们请...转载 2018-03-20 15:01:25 · 308 阅读 · 0 评论 -
iOS--实用性面试题
前言很多人都说熟悉UIKit,那对于常见的API是否熟悉?多线程是前端经久不衰的考点。大家对于Block的weak-strong dance都耳熟能详,是否清楚知道每一个引用背后的持有者,以及对象的具体释放时机?来试试这4道精挑细选的题目。正文题目1、UIImage相关看下面一段代码,保存到相册的是什么?(从格式、形状去描述)12345678910111213- (void)testUIImage...转载 2018-02-08 09:43:35 · 131 阅读 · 0 评论 -
iOS--提升开发效率的小笔记
这是摘自别人的,我有时间会一条一条查看下会添加一些其他的1. 打印View所有子视图po [[self view]recursiveDescription]2. layoutSubviews调用的调用时机* 当视图第一次显示的时候会被调用* 当这个视图显示到屏幕上了,点击按钮* 添加子视图也会调用这个方法* 当本视图的大小发生改变的时候是会调用的* 当子视图的frame发生原创 2018-02-07 16:08:43 · 297 阅读 · 0 评论 -
iOS--性能优化系列
性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论。然而由于iOS设备的限制,有时搞好性能是一件难事。开发过程中你会有很多需要注意的事项,你也很容易在做出选择时忘记考虑性能影响。这正是我写下这篇文章的原因。这篇文章以一个方便查看的核对表的形式整合了你可以用来提升你app性能的25条建议和技巧。请耐心读完这篇文章转载 2018-02-07 16:05:45 · 212 阅读 · 0 评论 -
iOS的一些开发小技巧
UITextView 中的文字默认并不是从最上面开始,在 UITextView 所在的 UIViewController中添加:self.automaticallyAdjustsScrollViewInsets = false;UITableView 自动隐藏键盘:tableView.keyboardDismissMode = .onDrag设置 UITableView原创 2018-02-06 09:46:34 · 308 阅读 · 0 评论 -
iOS基础总结
1.1 谈一谈GCD和NSOperation的区别?首先二者都是多线程相关的概念,当然在使用中也是根据不同情境进行不同的选择;GCD是将任务添加到队列中(串行/并发/主队列),并且制定任务执行的函数(同步/异步),其性能最好,底层是C语言的API,也更轻量级。iOS4.0以后推出的,针对多核处理器的并发技术,只能设置某一个队列的优先级,其高级功能有一次性执行dispatch_once,延迟转载 2018-02-06 09:43:31 · 361 阅读 · 0 评论 -
分享一些Swift的干货(续)
String + Extensionextension String { //MARK: - 计算年龄(self必须是“YYYY-MM-dd”格式的字符串) func ageWithStringOfBirth() -> String { let array = self.components(separatedBy: "-") if a原创 2017-08-28 16:57:48 · 403 阅读 · 0 评论 -
分享一些Swift的干货
Array+Extension mutating func arrayFromArray(_ arr:Array) { for item in arr { self.append(item) } }Color+Extensionextension UIColor{ class func colorWith原创 2017-08-28 16:47:07 · 389 阅读 · 0 评论 -
UI高级之UIWindow
UIWindow是一种特殊的UIView,通常在一个app中至少有一个UIWindow.iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了,一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow.加载info.plist后系统判断 在加载in原创 2016-05-28 20:51:59 · 241 阅读 · 0 评论 -
UI基础-UITableView之自定义不等高cell(纯代码)
给模型增加frame数据所有子控件的framecell的高度@interface HZKStatus : NSObject/**** 文字\图片数据 ****/// ...../**** frame数据 ****//** 头像的frame */@property (nonatomic, assign) CGRect iconFrame;// ...../** cell的原创 2016-05-28 20:48:45 · 541 阅读 · 0 评论 -
UI基础-UITableView之自定义等高cell
新建一个继承自UITableViewCell的子类,比如HZKTgCell@interface XMGTgCell : UITableViewCell@end在HZKTgcell.m文件重写-initWithStyle:reuseIdentifier:方法在这个方法中添加所有的子控件给子控件做一些初始化设置(设置字体、文字颜色等)/** * 在这个方法中添加原创 2016-05-28 20:45:25 · 244 阅读 · 0 评论 -
iOS基础开发UI界面-xib与代码自定义控件的区别
自定义控件的方法有两种,一种是通过纯代码添加,另一种是通过添加xib文件添加.然而两种方法都可以添加,由此可以总结出两种方法的区别和步骤一.通过代码自定义控件1>.新建一个继承UIView的类,(所谓自定义控件就是继承系统自带的控件写一个自己的控件)2>.在initWithFrame方法中添加子控件(保证别人在外面不管是通过init还是initWithFrame创建都能够添加子控件原创 2016-05-14 21:26:05 · 1120 阅读 · 0 评论 -
iOS基础开发UI界面-xib基本使用
XIB 在开发中,自定义View不一定要纯代码,还有另外的方式,就是创建xib.storyboard是从xib演化而来的,storyboard是描述整个软件界面,比较重量级,xib相对而言,是描述局部,比较轻量级.A.加载xib的两种方式:1.直接返回一个数组 NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"test原创 2016-05-13 19:35:09 · 501 阅读 · 0 评论 -
iOS基础开发-自定义控件
自定义控件,设置子控件的尺寸和位置 当系统提供的控件满足不了我们的需求,我们可以自定义一个控件,继承系统自带的控件,写一个属于自己的控件.自定义控件的好处是可以把封装控件内部的细节,不容易被外界随意修改.如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心.外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子原创 2016-05-12 23:15:02 · 532 阅读 · 0 评论 -
iOS基础开发-懒加载
1.在点击按钮这件事件上,如果把数据都写在按钮触发的事件上的话,你每次点击按钮都会创建一份数据,而事实上有些数据只要创建一次就可以,如果这样的话会消耗内存.不利于用户体验.所以懒加载就很有必要.所谓懒加载就是在用到的时候才去加载,并且只加载一次,不会重复加载.懒加载的核心是重写属性的getter方法.部分代码显示如下: 2.plist文件 为了不让数据写在代码中,可以原创 2016-05-12 22:57:52 · 267 阅读 · 0 评论 -
iOS基础开发-九宫格显示数据页面
九宫格显示就是在界面中显示一些数据和画面,当达到某个个数就会自动换行,在新的一行中显示.例如,购物车中,你添加一个商品在界面中就显示一个,假设它只有3列,当第一行加满三个之后自动换行显示.计算这个九宫格,第一步要写的是你的最大列数,随后就是设置你要显示物品的尺寸.从而计算出商品的X值和Y值.代码显示如下: 设置列数 int maxcols = 3; 设置商品大小原创 2016-05-12 22:51:29 · 1001 阅读 · 0 评论 -
UI基础控件
UI基础控件的属性和资源加载需要注意的方面原创 2016-05-11 20:47:48 · 224 阅读 · 0 评论 -
UI高级-UIApplication单例
UIApplication单例 什么是UIApplication? UIApplication对象是应用程序的象征.每一个应用都有自己的UIApplication对象,这个对象是系统自动帮我们创建的, 它是一个单例对象.一个iOS程序启动后创建的第一个对象就是UIApplication对象我们只能通过[UIApplication sharedAppli原创 2016-05-28 20:54:09 · 243 阅读 · 0 评论 -
iOS基础开发-UI基础之UIScrollview
一个手机屏幕显示的内容是有限,当内容数据多,在可是View中就展示不完全,这时候就需要用到UIScrollView控件.UIScrollView会隐藏超出内容的部分,相当于UIScrollView默认设置了clipBounds为YES.原创 2016-05-16 22:51:29 · 338 阅读 · 0 评论 -
关于升级swif3.0,Xcode8和iOS 10的一些东西
1.苹果官方提供的Swift 3 更新内容(部分Objective-C语法也变更了)1.1 语法上的形式变更语法形式上的变更是非常方便理解的,在迁移过程中,Xcode会自动提示您转为对应的格式,形式变更的内容如下:系统提供的枚举类型默认转为小写 比如 UIButton(type: .Custom) -> UIButton(type: .custom)注意:Xcode的内置翻译 2017-08-25 13:51:26 · 535 阅读 · 0 评论 -
关于cocoapods的一些东西
cocoapods的安装和使用1.先升级Gem(可以省略) sudo gem update --system2.切换cocoapods的数据源 终端输入如下命令(把Ruby镜像指向taobao,避免被墙,你懂得) gem sources --remove https://rubygems.org/ gem sources -a https:/原创 2017-08-25 13:43:59 · 221 阅读 · 0 评论 -
关于升级swif3.0的一些东西(续)
问题描述最近上线Swift3.1项目时,发现iOS8的用户进入某个界面都会闪退,而iOS8以上的用户都没有问题。问题所在发现崩溃的控制器,UITableViewController的init(style: UITableViewStyle)方法override init(style: UITableViewStyle) { super.init(styl转载 2017-08-25 11:57:25 · 225 阅读 · 0 评论 -
网络编程socket
socket编程简述: 它是基于TCP/IP协议,socket就是一个可以连通网络上不同计算机程序之间的管道,把一堆数据从管道的A端扔出去,则会从管道B端(要有序同时还可以从CDEF...端冒出来).管道的端口有两个因素来唯一确认,机及其的IP地址和程序的所使用的端口号. socket可以支持数据的发送和接收,他会定义一种称为套接字的变量,发送数据时首先创建套接字,然后原创 2017-08-25 11:53:30 · 215 阅读 · 0 评论 -
关于打开App崩溃的一个问题记录
iOS下dyld: Library not loaded:错误信息解决方案 今天测试一个iOS程序,在模拟器下是正常运行的,到真机上跑直接报错了,错误信息是:dyld: Library not loaded: /System/Library/Frameworks/GameController.framework/GameController Refe原创 2017-08-25 11:50:49 · 494 阅读 · 0 评论 -
关于升级swif3.0的一些东西
1. AnyObject :代表任何class类型的对象实例。class Man{}class Woman{}let man = Man()let woman = Woman()var arr:[AnyObject] =[man,woman]for people in arr {原创 2017-08-25 11:38:52 · 168 阅读 · 0 评论 -
项目开发步骤
1.从零开始一个项目的步骤 需要三部分的内容1.需求文档(大概了解到需要做到一个怎样的APP)2.原型图(APP之间是怎样跳转,各层之间的关系都展示出来)3.接口文档(数据的来源,可以更新到一些活的数据,而不至于是在本地的死数据)2.项目开发独立开发1. 需求文档:描述下应用功能2. 查看原型图:描述app每个界面 和 怎么与用户交互3. 根据原型图搭建基本原创 2016-07-07 15:19:31 · 272 阅读 · 0 评论