常用代码片段
GCD:仅执行一次
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedManager = [[self alloc] init];
});
常量的声明
// .h中声明
/** Posted when a task resumes. */
FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidResumeNotification;
// .m中赋值
NSString * const AFNetworkingTaskDidResumeNotification = @"com.alamofire.networking.task.resume";
或
static NSString * const AFURLSessionManagerLockName = @"com.alamofire.networking.session.manager.lock";
static NSTimeInterval const kDefaultAFNetworkActivityManagerActivationDelay = 1.0;
向RunLoop中添加Timer
// 添加
_activationDelayTimer = [NSTimer timerWithTimeInterval:self.activationDelay target:self selector:@selector(activationDelayTimerFired) userInfo:nil repeats:NO]; //Q:为什么此处的repeats为NO呢?
[[NSRunLoop mainRunLoop] addTimer:_activationDelayTimer forMode:NSRunLoopCommonModes];
// 移除
[_activationDelayTimer invalidate];
注:让需要将Timer从RunLoop中移除时,直接调用-invalidate
方法就好了~
(该方法的说明为“Stops the receiver from ever firing again and requests its removal from its run loop.”)
-setNeedsLayout; 与-layoutIfNeeded; 的区别
- (void)setNeedsLayout;
:无效当前的布局,并在下一个视图更新周期期间触发布局更新。由于这种方法不强制立即更新布局,而是等待下一个更新周期,在许多视图更新布局之前你可以使用它将这些布局无效化。这种行为可以让你将所有布局的更新整合到一个更新周期,这通常是更好的性能。
- (void)layoutIfNeeded;
:立刻布局子视图。使用此方法在布局绘制前来强制布局子视图。
未完待续...