美文网首页
汉字转英文及block基本使用

汉字转英文及block基本使用

作者: 面朝对象_春暖花开 | 来源:发表于2016-08-30 19:19 被阅读58次
    
    //
    //  ViewController.m
    //  runloop
    //
    //  Created by yaning Zhu on 16/8/25.
    //  Copyright © 2016年 yaning Zhu. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "ASDASViewController.h"
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        NSString * english = [self transform:@"朱亚宁"];
        NSLog(@"%@",english);
    }
    
    -(NSString *)transform:(NSString *)chinese
    {
        NSMutableString *english = [chinese mutableCopy];
        /**
         * __bridge桥的介绍:桥用在CF(Core Foundation)与OC对象之间的类型转换,转换的原因就是ARC自动管理内存只针对于OC对象,而对CF对象不起作用,也就是说,如果你声明了一个CF对象,即使在ARC文件中也要调用CFRelease 或者 CFBridgingRelease()进行释放.
           __bridge分为三类:1.__bridge:CF和OC对象转化时只涉及对象类型不涉及对象所有权的转化,所以这时候的CF对象为虚拟对象,只有在用到它的时候由OC转换,OC对象消失,它也就不存在了,所以无需进行释放.
                        2.__bridge_transfer:常用在讲CF对象转换成OC对象时,将CF对象的所有权交给OC对象,此时ARC就能自动管理该内存;(作用同CFBridgingRelease())
                        3.__bridge_retained:(与__bridge_transfer相反)常用在将OC对象转换成CF对象时,将OC对象的所有权交给CF对象来管理;(作用同CFBridgingRetain())
         1和3为OC转换为CF时使用,2为反向转换时使用.
         */
        
        /**
         *  kCFStringTransformMandarinLatin = 拼音
         *  kCFStringTransformStripCombiningMarks = 去声调
         */
        CFStringTransform((__bridge CFMutableStringRef)english, NULL, kCFStringTransformMandarinLatin, NO); //先转成带有音标的字符串
        CFStringTransform((__bridge CFMutableStringRef)english, NULL, kCFStringTransformStripCombiningMarks, NO); //去掉音标
        
        //去除两端空格和回车 中间空格不用去,用以区分不同汉字
        [english stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    
        return [english uppercaseString]; //转成大写
        
    }
    - (void)transferBlock{
        // 1.声明一个block作为局部变量,并调用 ----57行
        blockName1(@"Iam a good boy");//有点像C对吧
        
        //2.block作为参数
        [self doSomeThingWithBlock:^(NSString * theStr) {
            //
            NSLog(@"%@",theStr);
        }];
        //3.声明一个block作为属性
        myObjc * zyn = [[myObjc alloc]init];
        [zyn setBlock3:^(NSString * str3) {
            NSLog(@"%@",str3);
        }];
    }
    // block 因为看到一个标题:开发两年的程序猿都不一定理解的block,我这个小心情...
    
    // 1.声明一个block作为局部变量,并调用
    void(^blockName1)(NSString *) = ^void(NSString * str1){
        NSLog(@"%@",str1);
    };
    //2.block作为参数
    - (void)doSomeThingWithBlock:(void(^)(NSString*))block2{
        //这里记得书写形式:正011--顺序 不带括号,带括号,带括号
        //做点什么
        block2(@"ZYN is a good boy");
    }
    
    @end
    
    
    //作为传值调用
    @interface myObjc()
    //3.声明一个block作为属性
    //@property (copy)void (^block3)(NSString * str3);//这个应该放在外部接口里面,其他类可以调用
    
    @end
    @implementation myObjc
    
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            !self.block3?:self.block3(@"小朱是个大好人");
            
        }
        return self;
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:汉字转英文及block基本使用

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