1、NSRunLoop运行循环机制负责监听处理所有的事件。
2、关闭隐式动画
[CATransaction begin];
[CATransaction setDisableActions:YES];
[CATransaction commit];
3、函数重载
定义:函数名相同,函数类型不同
func sum(num1:Int ,num2:Int) ->Int {
return num1 + num2;
}
fun sum(num1:Int, num2:Int, num3:Int) ->Int{
return num1 + num2 + num3;
}
顺便说说其他函数 1、全局函数:在全局作用域中定义的函数;2、嵌套函数:在某个函数体中定义的函数。它的作用域仅限于定义嵌套函数的函数体内部。
4、调整tableview的separaLine线的位置
self.tableView.separatorInset = UIEdgeInsetsMake(0,100, 0, 0);
5、怎么解决内存泄漏
> 使用analyze进行代码的静态分析
> 多人开发 尽量用arc
6、从info.plist获得版本号
NSString *key = @"CFBundleVersion";
// 当前软件的版本号(从Info.plist中获得)
NSString *currentVersion = [NSBundle mainBundle].infoDictionary[key];
7、scrollview不自动调整inset
self.automaticallyAdjustsScrollViewInsets = NO;
self.edgesForExtendedLayout = UIRectEdgeNone;
8、属性
>存储属性:值存储在对象(类.实例)中的变量或常量。lazy延迟属性(让某些资源用到时再去加载,避免资源的浪费)
> 计算属性:提供get和set
>类型属性:用class关键字修饰的属性,就是类型属性,也称类属性。类的多个实例对象都共享唯一的一份。不需要创建实例对象,可以用类名访问属性。
注意:一个属性不能既是存储属性又是计算属性。class修饰的类型属性只能是计算属性,不能是存储属性
9、当选中cell时,系统就会调用这个方法
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
10、类和对象
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。
11、方法
类方法:用类名调用
对象方法:用创建的对象实例调用(访问属性时调用)
12、构造方法
定义:当一个对象创建完后都需要调用构造方法进行初始化(存储属性的初始化、构造方法的初始化)
特点:方法名是init、没有func关键字、没有返回值
13、析构方法
定义:一个对象被释放前,析构方法会立即被自动调用
作用:进行资源的释放
注意:不允许主动调用、每个类最多只能有一个析构方法
14、人为的滑动scrollview,等到手拖拽结束后,就会调用scrollview代理方法
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
15、当当前的view加载到父控件的时候调用
调用该方法:-(void)didMoveToSuperview
16、可选类型(some+none)
当一个值可能存在,可能不存在的时候就用可选类型
17、强制解包(拆包)
使用感叹号!将可选类型(包装)的值取出来
注意:进行强制解包之前,一定要先检测可选类型(包装)的值是否存在
18、选择绑定
概念:将可选类型的值有选择地赋给临时常量\变量。
作用:如果值存在,就把该值赋给临时常量\变量,否则就不创建常量\变量
19、如果服务器仓库的代码被修改了再提交代码会报错fetch first
解决措施:Source control —>pull 重新更新项目新增内容
20 JS调用OC总结
1、第一种 通过UIWebView代理拦截URL
2、第二种
导入#import <JavaScriptCore/JavaScriptCore.h>
a. block方式
主要通过拿到JS的执行环境 JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[ html的方法名() ] = ^(){
};
b. 遵守JSEport协议方式
JS:onclick = "change.callChangeColor()"
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
[context setObject:self forKeyedSubscript:@"change"];
// 遵守遵守JSEport协议 实现定义代理方法
- (void)callChangeColor()
21、OC调用JS总结
第一种.通过UIWebView的stringByEvaluatingJavaScriptFromString方法
第二种.获得WebView的运行环境的对象JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
然后用context执行evaluateScript:JS里面的方法
22、防止用户重复狂点按钮, 在0.2秒后再执行
[[self class] ancelPreviousPerformRequestsWithTarget:self selector:@selector(todoSomething:) object:btn];
[self performSelector:@selector(todoSomething:) withObject:btn afterDelay:0.2f];
23、+load():和+initialize()
+load():通常用来进行method swizzle,尽量避免过于复杂以及不必要的代码
+initialize():一般用于初始化全局变量或静态变量