iOS开发日记(1)

2017-08-09  本文已影响16人  牧羊人Q

一.关于UITextFile收起键盘的方法?

1、重载UIViewController中TouchBegin方法,执行[self.view endEditing:Yes];

2、直接执行[[UIApplication SharedApplication]sendAction:@selector(resignFirstReponder) to:nil forEvent:mil];用于获得当前UIViewController比较困难的时候

3、直接执行[[[UIApplication SharedApplication]KeuWindow]endEditing:YES];

4、相应控件的resginFistResponder

二、关于UIWebView知识

1、实现UIWebView与JavaScript相互调用需要调用UIWebView的-(NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script这个方法,也可以使用开源框架WebViewJavaScriptBridge

三、iOS内存管理

1、MRC下遵循“谁申请谁释放”,来避免循环引用的问题,尽量使用weak来声明变量。__bridge做类型转换

四、上下文相关知识

1、把系统默认的英文上下文菜单变为中文,用vim直接打开工程的Info.plist文件,在文件中增加以下内容:

CFBundleLocalizations

zh_CN

en

五、其他

1、iOS中所有的对象都一个isa指针来指向该类的对象

2、iPhone 5S以后苹果才有64位的处理器,引入Tagged Pointer后使APP运行更加流畅,并有3倍的访问速度提升,以及100倍的创建,销毁速度提升。(相比与32位处理器)

六、关于Block的知识

block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。

http://www.cocoachina.com/ios/20120514/4247.html

七、给一个对象添加方法和属性

1、通过继承这个对象来给这个对象添加属性和方法

2、通过分类可以对对象添加方法

3、通过runtime关联对象也可以添加方法和属性

//首先定义一个全局变量,用它的地址作为关联对象的key

static char associatedObjectKey;

//设置关联对象

objc_setAssociatedObject(target, &associatedObjectKey, @"添加的字符串属性", OBJC_ASSOCIATION_RETAIN_NONATOMIC);//获取关联对象

NSString *string = objc_getAssociatedObject(target, &associatedObjectKey);

NSLog(@"AssociatedObject = %@", string);

八、为什么UIView动画的回调可以用self

当 block 本身不被 self 持有,而被别的对象持有,同时不产生循环引用的时候,就不需要使用 weak self 了。最常见的代码就是 UIView 的动画代码,我们在使用 UIView 的animateWithDuration:animations方法 做动画的时候,并不需要使用 weak self,因为引用持有关系是:

UIView 的某个负责动画的对象持有了 block

block 持有了 self

因为 self 并不持有 block,所以就没有循环引用产生,因为就不需要使用 weak self 了

当动画结束时,UIView 会结束持有这个 block,如果没有别的对象持有 block 的话,block 对象就会释放掉,从而 block 会释放掉对于 self 的持有。整个内存引用关系被解除。

九、从CGContrextRef中取出NSData和UIImage

UIImage* zoomedImage = [[UIImage alloc] initWithCGImage:cgImage scale:1.0 orientation:UIImageOrientationLeft];

CGDataProviderRef provider = CGImageGetDataProvider(cgImage);

NSData *data = (__bridge_transfer NSData*)CGDataProviderCopyData(provider);

十、去除数组中重复的对象

NSArray *newArr = [oldArr valueForKeyPath:@“@distinctUnionOfObjects.self"];

上一篇下一篇

猜你喜欢

热点阅读