第一课
1.runtime机制
#import <objc/runtime.h>
unsigned int outCount = 0;
Ivar *ivars = class_copyIvarList([UIGestureRecognizer class], &outCount);
for (int i = 0; i<outCount; i++) {
// ivars[i];
// 获取成员属性的名字
NSString *name = @(ivar_getName(ivars[i]));
NSLog(@"%@",name);
}
2.initialize
// 什么时候调用 当第一次初始这个类的时候调用,如果当这个类有子类会调用多次
// 作用 初始化这个类
if (self == [XMGNavigationViewController class]) {
}
3.block的循环引用
// block 防止循环应用
// 你拥有我,我有用你
// block 会对代码块里面的强制针强引用
// __strong
// __weak XMGSettingTableViewController *weakSelf = self;
// typeof(x) 动态根据x判断x的真实类型
// int a = 10;
// typeof(1) b = 10;
//
// NSLog(@"a %d b %d",a, b);
__weak typeof(self) weakSelf = self;
item11.operationBlock = ^{
// UIViewController *vc = [[UIViewController alloc] init];
// vc.title = @"dadfafd";
// vc.view.backgroundColor = [UIColor yellowColor];
// [weakSelf.navigationController pushViewController:vc animated:YES];
// self -> _gruops
// 在block中如果访问下划线的成员属性,会造成循环应用
NSLog(@"%@",weakSelf.groups);
};
网友评论