自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 下载视频并保存至手机相册

功能介绍:需要将转码后的视频(小于20MB),通过APP下载至手机相册,可以将小视频分享至微信传播。 1.通过服务器转码视频,或者很多云服务商都会提供这个功能。 2.通过APP下载至手机相册,这个是咱们需要做的事。 主要技术:用到 URLSession 和 URLSessionDownloa...

2017-12-15 09:23:42 5175 0

原创 iOS 11 Swift-导航&状态栏&tableview适配

iOS 11运行项目变成了这个样。。 总结几个点: 1.状态栏重叠,字体颜色需要白色不是黑色。 2.导航栏上移了20个点。 3.tableview 上下都有空白。 开工, 一、首先解决状态栏问题。 1.infoplist中设置View controll...

2017-10-11 15:27:16 2678 2

原创 Swift中Timer计时器循环引用问题

老问题,和OC写法差不多。用计时器发现deinit方法不走,页面有内存泄漏,而且计时器关不掉。 deinit { // 销毁计时器 timer?.invalidate(); }可以在特定节点主动调用timer?.invalidate();但是并不完美~~...

2017-08-22 11:58:42 1398 0

原创 写高质量OC代码52建议总结:52.NSTimer会保留其目标对象

计时器需要和“运行循环”相关联,如下:  + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id...

2017-07-30 20:51:30 243 0

原创 写高质量OC代码52建议总结:51.load和initialize

有时候,类必须先执行某些初始化操作才能正常运行,先说下load方法:  +(void)load  加入运行期系统中的每个类及分类必定会调用此方法,只调用一次(在程序启动的时候)。如果类和所属的分类都定义了load方法,先调用类中的,再调用分类中的。  load方法的问题在于,执行的时候系统处...

2017-07-28 16:18:04 324 0

原创 写高质量OC代码52建议总结:50.构建缓存时选用NSCache而非NSDictionary

NSCache胜过NSDictionary之处在于,当系统资源耗尽时,他可以自动删减缓存,用字典就得自己写挂钩,系统低内存时手工删减,十分复杂。  NSCache不会“拷贝”键而是“保留”,这个点字典也能实现但是很复杂(49条~)。很多时候键都是由不支持拷贝的对象充当的,这点用起来比字典方便。N...

2017-07-28 14:39:10 731 0

原创 写高质量OC代码52建议总结:49.对自定义其内存管理语义的collection使用无缝桥接

OC系统库包含相当多的collection类,其中各种数组、字典、set。CoreFoundation框架也定义了一套C语言的API,操作这些collection及数据结构。Foundation中的NSArray和CoreFoundation中的CFArray是等价的。两种创建数组的方式可能有区别...

2017-07-28 11:46:59 261 0

原创 写高质量OC代码52建议总结:48.多用块枚举,少用for循环

以下是for循环针对NSArray,NSSet,NSDictionary的遍历。字典和set都是无序的,无法根据特定的整数下标直接访问其值。遍历set和dictionary都需要而外创建数组储存对象和key。这个中介数组增加了不必要的而外开支。 -(void)demoforArray{ ...

2017-07-27 17:09:37 500 0

原创 写高质量OC代码52建议总结:47.熟悉系统架构

将一系列代码封装为动态库,并放入描述接口的头文件,这种东西叫做框架。为iOS平台开发的第三方框架所使用的是静态库(static library),因为iOS应用程序不允许在其中包含动态库。  Cocoa Touch 里面继承了一批创建应用程序时经常用到的框架。  Foundation框架,NS...

2017-07-27 11:47:46 351 0

原创 写高质量OC代码52建议总结:46.不要使用dispatch_get_current_queue

使用GCD的时候经常要判断当前代码是在哪个队列上执行的,会发现有下面这个函数:  dispatch_queue_t dispatch_get_current_queue();  iOS 6.0开始已经弃用这个函数了,它检测当前队列是不是某个特定的队列。 -(NSString *)someSt...

2017-07-27 10:01:49 2449 0

原创 写高质量OC代码52建议总结:45.使用dispatch_once来执行只需要运行一次的线程安全代码

单例模式,该方法只会返回全类共用的单例实例,不会每次调用都创建新的实例。 @implementation EOCClass +(id)sharedInstance { static EOCClass *sharedInstance = nil; @synchronized(se...

2017-07-26 11:11:46 417 0

原创 写高质量OC代码52建议总结:44.通过Dispatch Group机制,根据系统资源状况来执行任务

dispatch group能够把任务分组。等待这组任务执行完毕,在回调函数中继续往下执行。比如,可以把压缩一系列文件的任务表示成dispatch group: dispatch_group_tdispatch_group_create(); 有两种方法给任务编组。 void dispat...

2017-07-25 17:19:11 303 0

原创 写高质量OC代码52建议总结:43.掌握GCD及操作队列的使用时机

执行后台任务时,GCD并不一定是最佳方式。NSOperationQueue,可以把操作以NSOperation子类的方式放在队列中,也能够并发执行。从iOS 4和Mac OSX 10.6开始,操作队列是在底层用GCD来实现的。  差别:GCD是纯C的API,操作队列是OC的对象。GCD任务用块表...

2017-07-25 14:59:49 264 0

原创 写高质量OC代码52建议总结:42.多用GCD,少用performSelector系列方法

有几个方法可以推迟执行方法调用,也可以指定运行方法。这些功能原来很有用,但是现在有个大中枢派发和块则应该避开。  -(id)performSelectoer:(SEL)selector  下面两行代码执行效果相同: [object performSelector:@selector(sel...

2017-07-25 13:20:50 268 0

原创 写高质量OC代码52建议总结:41.多用派发列队,少用同步锁

如果有多个线程要执行同一份代码,有时会出问题。对数据的读写时机不可控。通常要使用锁机制来实现同步。有两种办法。 -(void)synchronizedMethod { @synchronized(self) { // safe } } 这种方式会根据给定的对...

2017-07-24 17:48:28 603 0

原创 C++自学之路:3.1-简单变量

#include #include int main(int argc, const char * argv[]) { using namespace std; int n_int = INT_MAX; short n_short = SHRT_M...

2017-07-18 18:59:19 330 0

原创 写高质量OC代码52建议总结:40.用块引用其所属对象不要出现保留环

#import typedef void(^EOCNetworkFetcherCompletionHandler)(NSData *data); @interface EOCNetworkFetcherTwo : NSObject @property (nonatomic, strong,...

2017-07-14 18:05:00 365 0

原创 C++自学之路:2.5~2.6-总结、复习题

总结: 1.C++程序是由一个或多个函数模块组成的。函数由函数头和函数体组成,函数头指出函数的返回值类型和参数类型。 2.类是用户定义的数据类型规范,它描述了如何表示信息以及可以对数据执行的操作。对象是类的实体。 3.C++提供了两个用于输入输出的函数,cin、cout,他们是iostr...

2017-07-13 21:52:22 233 0

原创 C++自学之路:2.4--函数

#include #include int main(int argc, const char * argv[]) { using namespace std; double area; cout << "Enter the fl...

2017-07-12 22:54:42 347 0

原创 写高质量OC代码52建议总结:39.用handler块降低代码分散程度

iOS系统上有个“系统监控器”,如果程序在一定时间内无响应,就会被自动终止。所以,在处理用户界面的显示及触摸操作所用的线程(主线程)不能因为要执行I/O或者网络通信这类耗时的任务而阻塞。 异步方法在执行完任务后,需要以某种手段通知相关代码。常用的手段是设计委托代理。当相关事件发生时就可以通知对象...

2017-07-12 14:36:05 253 0

原创 C++自学之路:2.3--其他C++语句

#include int main(int argc, const char * argv[]) { using namespace std; int carrots; cout << "How many carrots do ...

2017-07-11 21:55:39 294 0

原创 写高质量OC代码52建议总结:38.为常用的块创建typedef

例: ^(Bool yesOrNo, int index){ if yesOrNo { return index * 2; } else { return index * 3; } }   如果将block赋值给变量:   in...

2017-07-11 08:57:48 187 0

原创 C++自学之路:2.2--C++语句

#include int main(int argc, const char * argv[]) { using namespace std; int carrots; carrots = 25; cout <<...

2017-07-10 22:52:16 202 0

原创 swift3.1:获取用户授权显示通知(iOS 10)

swift3.1:获取用户授权显示通知(iOS 10)

2017-07-07 16:27:02 618 0

原创 写高质量OC代码52建议总结:37.理解“块”

块和函数类似,只是直接定义在另一个函数里,和定义它的函数共享同一个范围里的东西。用“^”来表示。 ^{ //block }; 块和int,float或其他对象一样,可以作为一个值赋给变量并使用。块类型的语法和函数指针类似。 void (^someBlock)() = ^{ ...

2017-06-28 13:03:27 200 0

原创 写高质量OC代码52建议总结:36.不要使用retainCount

OC通过引用计数来管理内存。其值表明还有多少个对象希望此对象继续存活。对象创建后,其保留计数大于0.保留与释放操作会使该计数递增和递减,当引用计数变为0时,系统回收对象。  ARC中已经将此方法废弃。  1.它所返回的引用计数只是某个时间点上的值。该方法并没有考虑到稍后系统会把自动释放池清空,...

2017-06-27 13:37:17 231 0

原创 写高质量OC代码52建议总结:35.用僵尸对象调试内存管理问题

向已回收的对象发送消息是不安全的。具体是否可行看具体情况,取决于对象所占用的内存是否被其他内容覆写。但这无法确认。在程序没有崩溃的情况下,那块内存可能只复用了其中一部分,对象中的某些二进制数据依然有效。还有一种可能,就是那块内存恰好被另外一个有效且存活的对象所占据。在这种情况下,运行期系统会把消息...

2017-06-27 11:36:41 376 0

转载 Masonry介绍与使用实践

Masonry 源码:https://github.com/Masonry/Masonry Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X。 我们先来看一段官方的sample co...

2017-06-01 11:45:28 195 0

原创 写高质量OC代码52建议总结:34.以“自动释放池块”降低内存峰值

释放对象的方式有两种,一种是使用release,另一种是调用autorelease,将其加入自动释放池。自动释放池用于存放那些需要在稍后某个时刻释放的对象。清空自动释放池时,系统会向池中的对象发送release消息。  如果在没有创建自动释放池的情况下给对象发送release消息,控制台会输出警...

2017-05-11 09:16:17 253 0

原创 写高质量OC代码52建议总结:33.以弱引用避免保留环

几个对象都以某种方式互相引用,从而形成保留环。由于OC内存管理模型使用引用计数架构,所以这种情况通常会导致内存泄漏,因为最后没有别的对象会引用环中的对象。环里的对象将永久存活,不会被系统回收。 避免保留环的最佳方式就是弱引用,即“非拥有关系”。OC中有一项与ARC相伴的运行期特征,可以令开发者安...

2017-05-04 08:55:08 275 0

原创 写高质量OC代码52建议总结:32.编写“异常安全代码”时留意内存管理问题

纯C没有异常,而C++和OC都支持异常。当前运行期系统中,C++与OC的异常相互兼容。  异常只应在发生严重错误后抛出,虽说如此,有时仍然需要编写代码来捕获并处理异常。比如使用OC编码时,或者编码中用到了第三方程序库而此程序库所抛出的异常又不受你控制时,就需要捕获及处理异常了。  在try块中...

2017-05-03 17:19:08 461 0

原创 写高质量OC代码52建议总结:31.在dealloc方法中只释放引用并解除监听

对象在经历其生命周期之后最终会被系统回收,这时需要执行dealloc方法。在每个对象的生命周期内,此方法在保留计数降为0时只执行一次。绝不该自己调用dealloc方法,系统会在运行期适当的时候调用它。一旦调用了dealloc方法后,对象就不再有效了。  在dealloc方法中,ARC会自动生成....

2017-05-03 13:09:15 1913 0

原创 写高质量OC代码52建议总结:30.以ARC简化引用计数

if ([self shouldLogMessage]) { NSString *message = [[NSString alloc] initWithFormat:@"I am object, %p", self]; NSLog(@"message...

2017-04-28 09:47:29 3520 0

原创 写高质量OC代码52建议总结:29.理解引用计数

c使用引用计数来管理内存,可加减。想让某个对象继续存活,就增加其引用计数,用完了就递减。引用计数为0时,表示没人继续使用该对象,就可以销毁了。  “垃圾回收机制”在MAC OS X 10.8之后废弃,在IOS上从未支持过“垃圾回收机制”  Retain     递增保留计数  release   ...

2017-03-29 14:43:02 524 0

原创 Swift3.0 -- 错误处理 try

import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let jsonString...

2017-03-15 08:19:18 6086 0

原创 NSClassFromString 创建视图控制器

// // LYKMainViewController.m // MeiPaiPai2.0 // // Created by meipaipai on 17/3/7. // Copyright © 2017年 meipaipai. All rights reserved. // #imp...

2017-03-07 14:55:43 720 0

转载 IOS 开发中判断字符串是否为空字符的方法

- (BOOL) isBlankString:(NSString *)string { if (string == nil || string == NULL) { return YES; } if ([string isKindOfClass:[N...

2017-03-07 09:35:54 578 0

原创 写高质量OC代码52建议总结:28.通过协议提供匿名对象

协议定义了一系列方法,遵从协议的对象应该实现它们。我们可以用协议把自己写的API隐藏自来,将返回的对象设计为遵从协议的id类型。想要隐藏的类名就不会出现在API中了。如果接口背后有多个不同的实现类,而你又不想指明具体使用哪个类,可以考虑用这个办法,因为有时候这些类可能会变。  @property...

2017-03-03 14:31:41 768 0

原创 编写高质量OC代码52建议总结:27.使用“class-continuation 分类” 隐藏实现细节

类中经常会包含一些无需对外公布的方法及实例变量。OC的动态消息系统的工作方式决定了其不可能实现真正的私有。但是,我们还是应该尽量只把需要对外公布的那部分公开。  “class-continuation 分类” 和普通的分类不同,它必须定义在主类的实现文件里。这是唯一能声明实例变量的分类,此分类没...

2017-03-02 16:44:22 1093 0

原创 编写高质量OC代码52建议总结:26.不要在分类中设置属性

除了"class-continuation"分类之外,其他分类都无法向类中新增实例变量。因此,无法合成实现属性所需的实例变量。  例如:专门设计一个处理交友事物的类,其中所有的方法都与操作朋友列表有关。 #import "LYKPerson.h" @...

2017-03-01 16:15:02 751 0

提示
确定要删除当前文章?
取消 删除