//
// 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
网友评论