收集些不懂的iphone代码

本文提供了NSString类别方法实现URL编码及解码的功能,并利用NSData类别方法实现数据的压缩功能。通过对字符串进行URL编码和解码操作,以及使用zlib库进行数据压缩,展示了iOS开发中常用的数据处理技巧。
#import "NSString+URLEscaped.h"

@implementation NSString (URLEscaped)
- (NSString *)URLEscaped {
    CFStringRef escaped = CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)self, NULL, (CFStringRef)@"&+/?=", kCFStringEncodingUTF8);
    NSString *out = [NSString stringWithString:(NSString *)escaped];
    CFRelease(escaped);
    return [[out copy] autorelease];
}
- (NSString *)unURLEscape {
    CFStringRef unescaped = CFURLCreateStringByReplacingPercentEscapes(NULL, (CFStringRef)self, (CFStringRef)@"");
    NSString *out = [NSString stringWithString:(NSString *)unescaped];
    CFRelease(unescaped);
    return [[out copy] autorelease];
}

@end

============================================================

#import "NSData+Compress.h"
#include <zlib.h>

@implementation NSData (Compress)
-(NSData *)compressWithLevel:(NSInteger)compressionLevel {
    NSMutableData *bazip;
    if ([self length] == 0) {
        return nil;
    }
    if (compressionLevel < -1 || compressionLevel > 9)
        compressionLevel = -1;
   
    unsigned long len = [self length] + [self length] / 100 + 13;
    int res;
   
    do {
        bazip = [NSMutableData data];
        [bazip setLength:len+4];
        res = compress2([bazip mutableBytes]+4, &len, [self bytes], [self length], compressionLevel);
       
        switch (res) {
            case Z_OK:
                ((char *)[bazip mutableBytes])[0] = ([self length] & 0xff000000) >> 24;
                ((char *)[bazip mutableBytes])[1] = ([self length] & 0x00ff0000) >> 16;
                ((char *)[bazip mutableBytes])[2] = ([self length] & 0x0000ff00) >> 8;
                ((char *)[bazip mutableBytes])[3] = ([self length] & 0x000000ff);
                break;
            case Z_MEM_ERROR:
                NSLog(@"Compress: Z_MEM_ERROR: Not enough memory");
                [bazip setLength:0];
                break;
            case Z_BUF_ERROR:
                len *= 2;
                break;
        }
    } while (res == Z_BUF_ERROR);
   
    return [NSData dataWithData:bazip];
}
@end
==================================================

转载于:https://my.oschina.net/ahuaahua/blog/24277

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值