OC 你不造的事

这篇博客揭示了Apple的一些内置方法,如汉字转多种文字、NSData与Base64的转换、弱引用容器(NSPointerArray、NSHashTable、NSMapTable)以及它们在缓存(NSCache)和URL组件(NSURLComponents)中的应用。这些工具在iOS7及以上版本提供,对于优化iOS应用的性能和内存管理具有重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近发现了不少APPLE自带的方法,看了简直想撞墙啊,居然这么简单。当初不造的时候,费了好大劲啊,现在却如此简单的解决了。

汉字转阿拉伯文  韩文 希伯来 泰文 拉丁文  拼音

CFMutableStringRef string = CFStringCreateMutableCopy(NULL, 0, CFSTR("试一试"));
    NSLog(@"%@",string);
    CFStringTransform(string, NULL, kCFStringTransformToLatin, false);
    NSLog(@"%@",string);
    CFStringTransform(string, NULL, kCFStringTransformStripCombiningMarks, false);
    NSLog(@"%@",string);

去重音符号

CFStringTransform(string, NULL, kCFStringTransformStripCombiningMarks, false);

NSData 与 Base64 互相转换

NSData *data = [NSData alloc];
[data initWithBase64EncodedString: options:];
[data base64EncodedStringWithOptions:];

解码百分号编码的字符串

NSString *str = @"str";
    [str stringByRemovingPercentEncoding];
    [str stringByAddingPercentEncodingWithAllowedCharacters:];

数组首位取值

 NSArray *Array = [[NSArray alloc] init];
    [Array firstObject];
    [Array lastObject];
终于等到了这个方法,那么这个方法跟

    [Array objectAtIndex:0];
的区别在哪? 区别就是,当数组为空的时候,后面这个方法会让程序crash,而firstobject则会返回nil,让我们的程序可以安全很多。


弱引用容器

常见的Cocoa容器有NSArray、NSSet和 NSDictionary,大部分场景来说,足够用了,但是在某些情况下并不适用。NSArray和NSSet会保留保存其中的对象,NSDictionary不光保留值,还要复制键。但是从IOS6开始有了新的容器类:NSPointerArray、NSHashTable 和 NSMapTable,在苹果文档中统称为指针容器类 (pointer collection class),有时候配置为使用NSPointerFunctions类。

NSPointerArray类似于NSArray,NSHashTable 类似于NSSet, NSMapTable 类似于NSDictionary。这些新容器都可以配置为持有弱引用,非对象的指针或者其他罕见情形。NSPointerArray还有一个好处就是可以存储NULL值,这个问题在NSArray里面经常存在。

这些类兼容ARC弱引用。


NSCache

使用弱引用容器最常见的理由是实现缓存,但很多时候还是可以用Foundation的缓存对象NSCache代替。用法跟NSDictionary一样,可以调用objectForKey:、setObject: forKey: 和 removeObjectForKey:。

但是,事实上NSCache的一些特性还是被低估了,比如其多线程安全性。开发者可以在任何线程上不加锁的修改NSCache。NSCache 还被设计为能与符合<NSDiscardableContent>协议的对象整合。<NSDiscardableContent>最常见的类型是NSPurgeableData。通过调用beginContentAccess 和 endContentAccess,开发者能控制何时丢弃对象时安全的,这不仅能在应用运行的时候提供自动缓存管理,甚至在应用暂停时也有用。通常在内存吃紧且内存警告没有释放足够内存的情况下,IOS开始杀掉暂停的后台应用,这时应用不会受到委托消息,会被杀掉。但如果用了NSPurgeableData,IOS会替你释放内存,即使应用处于暂停状态。


NSURLComponents

NSString *url = @"http://www.baidu.com/wiki/Special:Search?search=ios";
    NSURLComponents *components = [NSURLComponents componentsWithString:url];
    NSString *host = components.host;
    NSLog(@"%@",host);
    components.host = @"www.sina.com";
    NSURL *esURL = [components URL];
    NSLog(@"%@",esURL);

此外NSURL.h 添加了一些有用的分类来处理URL。可以用[NSCharacterSetURLPathAllowedCharacterSet]得到允许在路径中出现的字符集合。还有[NSString stringByAddingPercentEncodingWithAllowedCharacters:],允许开发者控制使用百分号编码的字符。

 

要说明的一点是,以上这些方法,类大部分是IOS7以上才可以支持,在IOS6中使用的话,请注意可能出现的问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值