1、设计模式单例:
+ (UcanSDK*)shareUcanSDK
{
static dispatch_once_t once;
dispatch_once(&once, ^{
_ucanSDK = [[UcanSDK alloc]init];
}) ;
return _ucanSDK;
}
2、delegate 具体实现;代理的声明weak,用strong会出现循环引用,例如 A中有个delegate,在B中实现,B中有A的声明(A *a = [ A alloc]; )A的引用计数+1,在B中a.delegate = self(把A委托给B),B引用计数+1;导致循环引用;
3、scrollview 的delegate scrollviewDidScroll ;tableview&scrollview都继承于scrollview
4、frame&bounce :frame是相对于父视图的(x,y,width,height)x&y是相对于父视图定的 而bounce中x&y是相对于自身的,所以bounce中x&y为0;
5、ARC下weak引用计数为0时自动赋值nil,assign不会自动赋值会导致野指针;
6、动态库&静态库:静态库编译时链接到代码中,运行时不需要改变静态库;动态库编译时不会链接到代码中,运行时被载入;
7、宏预处理器中进行文本替换,没有类型,不做任何类型检查;A.h中 UIKIT_EXTERN NSString *const Height;A.m中 NSString * const Height = @"height”;这种全局的量有类型;知道类型的量在全局声明用const extern;static 局部静态变量
8、iOS中循环引用问题 block{self.tableView reloadData},block是独立的运行体,在其中间的的self会强引用导致循环引用,解决方法 _weak typeof(self)weakSelf = self;[weakSelf.tableView reloadData],在block中self若引用使用weakSelf;delegate声明使用weak;NSTimer :类持有了nstimer ,反过来nastier又持有了类,[NSTimer scheduledTimerWithTimeInterval:_expired target:self selector 方法中target:self 是说nastier反过来持有了类,这样就会出现循环引用,所以在对象删除之前 [timer invalidate];timer = nil;
9、nil是个空的对象NULL是个空的指针
10、GCD线程、队列问题
11、IOS开发几种设计模式 :MVC model存储数据的模型(代码中常用的解析数据用的模型,数据处理写在这里 V:view 例如页面中的cell 一些自定义的控件,一些界面的东西写在这里等 C:controller 视图控制器,加载view;delegate模式 tableview例子 ;KVO模式 key_value observing 当指定的对象属性发生变化时,对象会接收到通知,
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
- {
- if([keyPath isEqualToString:@"price"])
- {
- myLabel.text = [stockForKVO valueForKey:@"price"];
- }
- };单例模式 确保程序运行期某个类,只有一份实例,用于进行资源共享控制
- + (UcanSDK*)shareUcanSDK
- {
- static dispatch_once_t once;
- dispatch_once(&once, ^{
- _ucanSDK = [[UcanSDK alloc]init];
- }) ;
- return _ucanSDK;
- }
-
- 12、图片播放 carousel 制作banner广告页 滚动的scrollview