新手求问这段OC代码有没有内存泄漏?

libolf 2019-12-18 04:32:17
- (NSString *) getRandomWord:(int)count{
int nextNum = -1;
NSStringEncoding gbkEncoding =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *result = [[NSString alloc] init];

for (int i = 0; i < count; i++) {
@autoreleasepool {
// [0, 100)之间的随机数
nextNum = arc4random() % 100;
if (nextNum % 4 == 0) {
int heightPos = 176 + arc4random() % 39;
int lowPos = 161 + arc4random() % 93;
Byte wordBytes[2] = {(Byte)heightPos, (Byte)lowPos};
NSString *oneWord = [[NSString alloc] initWithBytes:wordBytes length:2 encoding:gbkEncoding];
result = [result stringByAppendingString:oneWord];
}else if (nextNum % 4 == 1){
char c = 65 + arc4random() % 26;
result = [result stringByAppendingFormat:@"%c", c];
}else if (nextNum % 4 == 2){
char c = 97 + arc4random() % 26;
result = [result stringByAppendingFormat:@"%c", c];
}else{
int num = 1 + arc4random() % 10;
result = [result stringByAppendingFormat:@"%d", num];
}
}
}

return result;
}
...全文
398 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
江边鸟_ 2020-01-20
  • 打赏
  • 举报
回复
ARC下没有内存泄漏,因为 NSString 对象类型可以得到自动释放,而 Byte 数组内存分布在栈中,走出 {} 范围就回被回收
不担心 2019-12-28
  • 打赏
  • 举报
回复
有没内存泄露人肉很难看出来的,用xcode的分析工具检查一下就知道了 xcode---product----Profile----Leak
HumorousGhost 2019-12-27
  • 打赏
  • 举报
回复
引用 楼主 libolf 的回复:
- (NSString *) getRandomWord:(int)count{
    int nextNum = -1;
    NSStringEncoding gbkEncoding =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    NSString *result = [[NSString alloc] init];

    for (int i = 0; i < count; i++) {
        @autoreleasepool {
            //  [0, 100)之间的随机数
            nextNum = arc4random() % 100;
            if (nextNum % 4 == 0) {
                int heightPos = 176 + arc4random() % 39;
                int lowPos = 161 + arc4random() % 93;
                Byte wordBytes[2] = {(Byte)heightPos, (Byte)lowPos};
                NSString *oneWord = [[NSString alloc] initWithBytes:wordBytes length:2 encoding:gbkEncoding];
                result = [result stringByAppendingString:oneWord];
            }else if (nextNum % 4 == 1){
                char c = 65 + arc4random() % 26;
                result = [result stringByAppendingFormat:@"%c", c];
            }else if (nextNum % 4 == 2){
                char c = 97 + arc4random() % 26;
                result = [result stringByAppendingFormat:@"%c", c];
            }else{
                int num = 1 + arc4random() % 10;
                result = [result stringByAppendingFormat:@"%d", num];
            }
        }
    }

    return result;
}
不知道有没有,但CFStringConvertEncodingToNSStringEncoding这个函数属于CoreFunction框架,这个框架没有内存自动回收机制

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧