Decorative image frame

ios之各种锁机制的使用和理解

锁可以分为两大类:自旋锁(OSSpinLock)和互斥锁(pthread_mutex)。

相同点:
都能保证同一时间只有一个线程访问共享资源。都能保证线程安全。

不同点:
互斥锁:如果共享数据已经有其他线程加锁了,线程会进入休眠状态等待锁。一旦被访问的资源被解锁,则等待资源的线程会被唤醒。
自旋锁:如果共享数据已经有其他线程加锁了,线程会以死循环的方式等待锁,一旦被访问的资源被解锁,则等待资源的线程会立即执行。
自旋锁的效率高于互斥锁。

各种锁性能:
除了 OSSpinLock 外,dispatch_semaphore 和 pthread_mutex 性能是最高 @synchronized() 是性能最低的
阅读全文...

ios之anchorPoint和position详解

UIView 有三个属性 frame bounds center 我们都了解,这里就不多说了。
CALayer 也有对应的属性 frame bounds position anchorPoint
阅读全文...

解决gitlab(sourcetree)需要输入用户名密码的问题

每次pull或者push时都要输入好几次密码,真的很烦。下面的方法亲测有效,希望能帮到你!

1. 进入~用户目录(不是工程目录哦~):cd ~

2. 建立文件: touch .git-credentials

阅读全文...

CGAffineTransform和CATransform3D原理

####简述
CGAffineTransform是用来做View层2D的形变的,UIView有个属性transform的类型就是CGAffineTransform
CATransform3D是用来做layer层3D的形变的,CALayer也有个属性transform的类型就是CATransform3D

那么CGAffineTransform和CATransform3D的原理是什么呢?
阅读全文...

NSOperation、NSOperationQueue

####一、 为什么要使用 NSOperation、NSOperationQueue
NSOperation、NSOperationQueue 是基于 GCD 更高一层的封装,完全面向对象。但是比 GCD 更简单易用、代码可读性也更高。
可添加完成的代码块,在操作完成后执行。
添加操作之间的依赖关系,方便的控制执行顺序。

阅读全文...

iOS之创建一个常驻线程

常驻线程有什么用呢?
让一个一直存在的子线程,等待其他线程发来消息,处理其他事件。

注意 :不要使用GCD的global队列创建常驻线程
原因:global全局队列,整个工程共用的队列,队列里的所有线程都会放进一个线程池中,当线程池满了的时候,就会进入等待

阅读全文...

iOS图片拉伸

1
2
3
UIImage * img = [UIImage imageNamed:@"3X"];
float w = img.size.width;
float h = img.size.height;
阅读全文...

iOS 协议中定义属性

1
2
3
4
@protocol CETableViewModelProtocol <NSObject>
@property (nonatomic, strong) Class cellClass;
@property (nonatomic, copy ) NSString* cellType;
@end
阅读全文...

iOS 宏(define)与常量(const)以及extern

###思考下,下面的有什么不同,分别在什么时候使用呢?

1
2
3
4
5
6
7
8
9
10

#define HSCoder @"汉斯哈哈哈"
NSString *HSCoder = @"汉斯哈哈哈";
extern NSString *HSCoder;
extern const NSString *HSCoder;

static const NSString *HSCoder = @"汉斯哈哈哈";

const NSString *HSCoder = @"汉斯哈哈哈";
NSString const *HSCoder = @"汉斯哈哈哈";

阅读全文...

CADisplayLink小知识点获得FPS

###CADisplayLink是一个能让我们以和屏幕刷新率同步的频率将特定的内容画到屏幕上的定时器类. iPhone设备的屏幕刷新是60Hz,即一秒60次。

阅读全文...