NSString 初始化内存管理状态

NSString *string = @"ABC";

NSString中initWithFormat和stringWithFormat会生成新的对象。

stringWithString和initWithString不会生成新的对象,生成的对象地址就是常量 ABC 的地址。

如下截图,代码在下方喔;

- (void)viewDidLoad {

[super viewDidLoad];

NSString *tempString = @"LOL";

NSLog(@"LOL常量内存地址=%p ----- tempString内存地址=%p", @"LOL", tempString);

NSLog(@"%@", [self compareAddress:@"LOL" otherAddress:tempString type:@"=赋值"]);

NSString *str0 = [NSString stringWithString:tempString];

NSLog(@"%@", [self compareAddress:@"LOL" otherAddress:str0 type:@"stringWithString"]);

NSString *str1 = [NSString stringWithFormat:@"LOL"];

NSLog(@"%@", [self compareAddress:@"LOL" otherAddress:str1 type:@"stringWithFormat"]);

NSString *str2 = [[NSString alloc] initWithFormat:@"LOL"];

NSLog(@"%@", [self compareAddress:@"LOL" otherAddress:str2 type:@"initWithFormat"]);

NSString *str3 = [[NSString alloc] initWithString:tempString];

NSLog(@"%@", [self compareAddress:@"LOL" otherAddress:str3 type:@"initWithString"]);

}

- (NSString *)compareAddress:(id)addressOne otherAddress:(id)address type:(NSString *)type  {

if ([[NSString stringWithFormat:@"%p", addressOne] isEqual:[NSString stringWithFormat:@"%p", address]]) {

return [NSString stringWithFormat:@"%@方法生成的字符串地址都一样, %@ = %p", type, address, address];

} else {

return [NSString stringWithFormat:@"%@方法生成的字符串地址不一样,地址为%p === 地址为%p", type, addressOne, address];

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容