MRC环境下两种基于整数创建NSString实例的语法有何区别
MRC场景下两种NSString创建方法的区别
两种写法核心差异集中在内存所有权归属、释放规则两个维度,具体如下:
- 第一种写法:
NSString *str1 = [NSString stringWithInt: 10];
属于类工厂方法生成的对象,返回的是自动释放对象,默认会被加入当前线程的自动释放池。MRC规则下你不持有该对象的所有权,不需要手动调用release释放,当自动释放池销毁时对象会被系统自动回收。如果需要长期持有该对象,必须主动调用retain方法增加引用计数,否则自动释放池销毁后再访问该对象会触发野指针崩溃。 - 第二种写法:
NSString *str2 = [[NSString alloc] initWithInt: 10];
属于alloc+初始化方法生成的对象,你持有该对象的所有权,初始化完成后引用计数为1。MRC规则下你必须在对象使用完成后主动调用release或者autorelease方法释放对象,否则会产生内存泄漏。
补充说明:上述差异仅在MRC环境下需要开发者手动关注,ARC环境下编译器会自动插入内存管理代码,两种写法对开发者来说感知不到内存管理层面的差异。
内容的提问来源于stack exchange,提问作者Divya
相关产品推荐
相关产品推荐

