汉字转英文及block基本使用

2016-08-30  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读