Ios相关知识点

delims 于 2020-11-26 发布

关联对象

KVO

#KVC

Block

ARC环境下,什么情况下编译器会把 stack 上的block复制到 heap上

  1. block 作为函数返回值。
  2. 将block 复制给 __strong 指针。
  3. block作为usingblock时。
  4. block作为GCD API的方法参数时。

UIView -(void)sizeToFit

@property(nonatomic,getter=isExclusiveTouch) BOOL exclusiveTouch API_UNAVAILABLE(tvos); // default is NO

A Boolean value that indicates whether the receiver handles touch events exclusively.

UISrollView 属性

The manner in which the keyboard is dismissed when a drag begins in the scroll view.

A Boolean value that determines whether the scroll view delays the handling of touch-down gestures.

A Boolean value that controls whether touches in the content view always lead to tracking.

The scroll view calls this method just after it starts sending tracking messages to the content view. If it receives NO from this method, it stops dragging and forwards the touch events to the content subview. The scroll view does not call this method if the value of the canCancelContentTouches property is NO.

方法查找失败后处理流程

  1. 首先根据方法是类方法还是实例执行+ (BOOL)resolveClassMethod:(SEL)sel 或者 + (BOOL)resolveInstanceMethod:(SEL)sel 进行第一步拯救。在这个方法里可以使用class_addMethod 动态添加方法实现,返回YES代表添加上了,(亲测,如果添加了返回NO也可以执行)。如果是类方法这一步不处理直接崩溃,如果是实例方法不添加进行下一步流程。

  2. 执行- (id)forwardingTargetForSelector:(SEL)aSelector 返回一个对象,可以将方法转发给他处理。否则进行下一步
  3. 执行- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector 生成方法签名然后返回,如果没有生成方法签名,直接崩溃。生成方法签名返回后进行下一步。
  4. 执行- (void)forwardInvocation:(NSInvocation *)anInvocation 转发 NSInvocation,重写这个方法可以指定一个对象来执行 invocation,也可以什么都不做也不会崩溃,如果交给super处理依然会崩溃。