崩溃分析、收集、在线修复

参考文章:

iOS 中捕获程序崩溃日志

Mehr lesen

尾调用[tail call elimination]

参考:
https://en.wikipedia.org/wiki/Tail_call
http://blog.sina.com.cn/s/blog_5374d6e30100t0do.html

Mehr lesen

iOS加载图片的相关优化

高效地实现带圆角效果的 UICollectionViewCell

为 UIImageView 设置裁剪过特定边角的图片

UIImageView+HGCWebImage.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#import <UIKit/UIKit.h>
#import <SDWebImage/SDWebImageManager.h>
#import <NYXImagesKit/NYXImagesKit.h>

typedef NS_OPTIONS(NSInteger, HGCRectCorner) {
HGCRectCornerNone = 0,
HGCRectCornerTopLeft = 1 << 0,
HGCRectCornerTopRight = 1 << 1,
HGCRectCornerBottomLeft = 1 << 2,
HGCRectCornerBottomRight = 1 << 3,
HGCRectCornerAll = HGCRectCornerTopLeft|HGCRectCornerTopRight|HGCRectCornerBottomLeft|HGCRectCornerBottomRight,
};

@interface UIImageView (HGCWebImage)

- (void)hgc_setImageWithURLString:(NSString *)urlstring placeholderImage:(UIImage *)placeholderImg;
- (void)hgc_setImageWithURLString:(NSString *)urlstring
placeholderImage:(UIImage *)placeholderImg
loadFailImage:(UIImage *)loadFailImg;

/**
* sizeToFill 的 width/height 最好都为整数,否则还是会出现像素不对齐的问题
*/

- (void)hgc_setImageWithURLString:(NSString *)urlstring
placeholderImage:(UIImage *)placeholderImg
loadFailImage:(UIImage *)loadFailImg
scaleToFillSize:(CGSize)sizeToFill;

- (void)hgc_setImageWithURLString:(NSString *)urlstring
placeholderImage:(UIImage *)placeholderImg
loadFailImage:(UIImage *)loadFailImg
scaleToFillSize:(CGSize)sizeToFill
roundingCorners:(HGCRectCorner)corners
cornerRadii:(CGFloat)radius;

@end

Mehr lesen

单例

#iOS 单例

##ARC方式实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//.h文件
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
//单例方法
+(instancetype)sharedSingleton;
@end
//.m文件
#import "Singleton.h"
@implementation Singleton
//全局变量
static id _instance = nil;
//单例方法
+(instancetype)sharedSingleton{
return [[self alloc] init];
}
////alloc会调用allocWithZone:
+(instancetype)allocWithZone:(struct _NSZone *)zone{
//只进行一次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
return _instance;
}
//初始化方法
- (instancetype)init{
// 只进行一次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super init];
});
return _instance;
}
//copy在底层 会调用copyWithZone:
- (id)copyWithZone:(NSZone *)zone{
return _instance;
}
+ (id)copyWithZone:(struct _NSZone *)zone{
return _instance;
}
+ (id)mutableCopyWithZone:(struct _NSZone *)zone{
return _instance;
}
- (id)mutableCopyWithZone:(NSZone *)zone{
return _instance;
}
@end

Mehr lesen

hexo github 个人博客搭建

本地配置环境

1、下载nodejs 下载链接,选择一个稳定的版本安装

Mehr lesen

NSProxy代理类

NSProxy与NSObject的区别

代理类NSProxy,就是通过向外暴露Proxy类,来达到屏蔽内部使用的具体类。 NSProxy没有init方法,天生就是用来做代理的。

Mehr lesen

viewDidLoad,initWithNib,loadView,awakeFromNib

loadView

无论XIB还是代码创建都会调用loadView方法。self.view为nil时才会被调用。
手工创建视图时,loadView被调用时self.view还为nil。一般在该方法中手工定制view。
XIB创建视图时,loadView仍会被调用、loadView被调用时XIB定制的视图还没创建完成,若是再覆写该方法的话、会将XIB定制的视图覆盖掉。
所以,纯手工定制视图时,一般在该方法中写;XIB定制视图时、不要覆写该方法。

Mehr lesen

NSURLSession

概览

和 NSURLConnection 一样,NSURLSession 指的也不仅是同名类 NSURLSession,还包括一系列相互关联的类。NSURLSession 包括了与之前相同的组件,NSURLRequest 与 NSURLCache,但是把 NSURLConnection 替换成了 NSURLSession、NSURLSessionConfiguration 以及 NSURLSessionTask 的 3 个子类:NSURLSessionDataTask,NSURLSessionUploadTask,NSURLSessionDownloadTask。 代理方法也有一些变化,在 NSURLConnection 中有两个 delegate 方法可以表明一个网络请求已经结束:NSURLConnectionDataDelegate 中的 -connectionDidFinishLoading:NSURLConnectionDelegate 中的-connection:didFailWithError:,而在 NSURLSession 中改为一个 delegate 方法:NSURLSessionTaskDelegate-URLSession:task:didCompleteWithError:

Mehr lesen

GCD

GCD

dispatch_group

如果想在dispatch_queue中所有的任务执行完成后在做某种操作,在串行队列中,可以把该操作放到最后一个任务执行完成后继续,但是在并行队列中怎么做呢。这就有dispatch_group 成组操作。比如

Mehr lesen

__bridge,__bridge_transfer,__bridge_retained

什么时候用到__bridge关键字

在ARC模式中,如果需要进行Core Foundation与Objective-C类型之间的转换。需要用到__bridge桥接。

Mehr lesen