美文网首页
iOS开发日记(1)

iOS开发日记(1)

作者: 牧羊人Q | 来源:发表于2017-08-09 14:32 被阅读16次

    一.关于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"];

    相关文章

      网友评论

          本文标题:iOS开发日记(1)

          本文链接:https://www.haomeiwen.com/subject/lwtqrxtx.html