iOS---常用方法總結
最近兩個月,在開發自己公司的一個靜態庫,碰到了一些比較奇葩的問題,不過最後都解決了,與大家分享一下我的解決方案
1. sha1加密:
+ (NSString *) sha1:(NSString *)input {
if (!input || [inputisEqualToString:@]) {
return@;
}
// const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
// NSData *data = [NSData dataWithBytes:cstr length:input.length];
// 之所以將上面兩行代碼更換為如下一行代碼,是因為,在加密中文時,發現上面那種會遺失資料
NSData *data = [inputdataUsingEncoding:NSUTF8StringEncoding];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, (unsignedint)data.length, digest);
NSMutableString *output = [NSMutableStringstringWithCapacity:CC_SHA1_DIGEST_LENGTH *2];
for(int i=0; i
[output appendFormat:@%02x, digest[i]];
}
return output;
}
2. 解析json串
+ (id)getJsonObjectWithJsonStr:(NSString *)jsonStr {
if (jsonStr ==nil) {
returnnil;
}
//下面兩行代碼,是為了防止json串中含有一些url encode的特殊字元
jsonStr = [(NSString *)jsonStrstringByReplacingOccurrencesOfString:@+withString:@ ];
jsonStr = [jsonStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSData *jsonData = [jsonStrdataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
id object = [NSJSONSerializationJSONObjectWithData:jsonData options:NSJSONReadingMutableContainerserror:&error];
if (error) {
LGLog(@json解析失敗:%@, error);
returnnil;
}
return object;
}
3. 判斷string中是否含有中文字元
+ (BOOL)IsChinese:(NSString *)str {
for(int i=0; i< [strlength];i++) {
int a = [strcharacterAtIndex:i];
if( a >0x4e00 && a < 0x9fff) {
returnYES;
}
} returnNO;
}
4. 判斷越獄機器,因為越獄的裝置都會安裝有cydia
+ (BOOL)isJailBreak
{
if ([[UIApplicationsharedApplication] canOpenURL:[NSURLURLWithString:@cydia://]]) {
NSLog(@The device is jail broken!);
returnYES;
}
NSLog(@The device is NOT jail broken!);
returnNO;
}
5. 根據常值內容,動態計算label高度
指定label的width後,調用 [label sizeToFit]方法即可,在iPhone5s、iPhone6、iPhone6 Plus都沒有問題,其它的沒有裝置,待測試!