ios 如果ios nsarray nsstring中加入一堆nsstring 怎么去除

[iOS开发] MRC下NSNumber,NSString,及NSArray,NSMutableArray的引用计数,个人学习 | IT知识库
-& 正文阅读
[iOS开发]MRC下NSNumber,NSString,及NSArray,NSMutableArray的引用计数,个人学习
MRC下NSNumber,NSString,及NSArray,NSMutableArray的引用计数,个人学习
1、提问:甲乙丙分别输出的retainCount为多少?& &&NSMutableArray* ary = [[NSMutableArray array] retain];& & NSString *str = [NSString stringWithFormat:@"test"];//1&__NSCFString,&在&&Foundation/Foundation.h&框架下-1 &NSTaggedPointerString,如果长度超过一定范围或者为中文时,引用计数为1__NSCFString          ---此处特别说明,当 NSString *str = @&test&;这种方式创建时&__NSCFConstantString,引用计数在&&Foundation/Foundation.h&框架下 -1,否则              & & [str retain];//+1& & [ary addObject:str];//+1& & NSLog(@"甲------%@%ld",str,[str retainCount]);//3& & [str retain];//+1& & [str release];//-1& & [str release];//-1& & NSLog(@"乙------%@%ld",str,[str retainCount]);//2& & [ary removeAllObjects];//-1& & NSLog(@"丙------%@%ld",str,[str retainCount]);//12、NSArray,NSMutableArray& NSArray * array = [NSArray array];// -1 &__NSArray0& & [array retain];//-1& & NSArray * array1 = [NSArray& arrayWithObject:@"1"];//1 &__NSArrayI  &NSMutableArray * array3 = [NSMutableArray array];//1 &__NSArrayM& & NSMutableArray * array4 = [NSMutableArray arrayWithObject:@"1"];//1&__NSArrayM3、NSNumber& & NSNumber *num1 = @(100);// __NSCFNumber4775807& & NSNumber *num2 = [[NSNumber alloc] initWithInt:1000000];// __NSCFNumber4775807以上关于NSString的解释,因为会出现多种情况,欢迎交流。
加: 22:28:47&
更: 22:28:57&
&&网站联系: qq: email:&iOS 开发 NSString(NSDictory,NSArray)为什么用copy修饰,而不是用strong修饰
大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢?
@property (strong,nonatomic) NSString *rS
@property (copy, nonatomic)
NSString *cS
- (void)test {
NSMutableString *mStr = [NSMutableStringstringWithFormat:@&abc&];
NSLog(@&mStr:%p,%p&,
mStr,&mStr);
NSLog(@&retainStr:%p,%p&, _rStr, &_rStr);
NSLog(@&copyStr:%p,%p&,
_cStr, &_cStr);
假如,mStr对象的地址为0x11,也就是0x11是@&abc&的首地址,mStr变量自身在内存中的地址为0x123; 当把mStr赋值给retain的rStr时,rStr对象的地址为0x11,rStr变量自身在内存中的地址为0x124;rStr与mStr指向同样的地址,他们指向的是同一个对象@&abc&,这个对象的地址为0x11,所以他们的值是一样的。 当把mStr赋值给copy的cStr时,cStr对象的地址为0x22,cStr变量自身在内存中的地址0x125;cStr与mStr指向的地址是不一样的,他们指向的是不同的对象,所以copy是深复制,一个新的对象,这个对象的地址为0x22,值为@&abc&。
如果现在改变mStr的值:
[mStr appendString:@&de&];
NSLog(@&retainStr:%@&,
NSLog(@&copyStr:%@&,
使用retain的字串rStr的值:@&abcde&,
而使用copy的字串cStr的值:@&abc&, 所以,如果一般情况下,我们都不希望字串的值跟着mStr变化,所以我们一般用copy来设置string的属性。 如果希望字串的值跟着赋值的字串的值变化,可以使用strong,retain。 注意:上面的情况是针对于当把NSMutableString赋值给NSString的时候,才会有不同,如果是赋值是NSString对象,那么使用copy还是strong,结果都是一样的,因为NSString对象根本就不能改变自身的值,他是不可变的。
把一个对象赋值给一个属性变量,当这个对象变化了,如果希望属性变量变化就使用strong属性,如果希望属性变量不跟着变化,就是用copy属性。
由此可以看出:
对源头是NSMutableString的字符串,retain仅仅是指针引用,增加了引用计数器,这样源头改变的时候,用这种retain方式声明的变量(无论被赋值的变量是可变的还是不可变的),它也会跟着改变;而copy声明的变量,它不会跟着源头改变,它实际上是深拷贝。
对源头是NSString的字符串,无论是retain声明的变量还是copy声明的变量,当第二次源头的字符串重新指向其它的地方的时候,它还是指向原来的最初的那个位置,也就是说其实二者都是指针引用,也就是浅拷贝。
另外说明一下,这两者对内存计数的影响都是一样的,都会增加内存引用计数,都需要在最后的时候做处理。
其实说白了,对字符串为啥要用这两种方式?我觉得还是一个安全问题,比如声明的一个NSString *str变量,然后把一个NSMutableString *mStr变量的赋值给它了,如果要求str跟着mStr变化,那么就用如果str不能跟着mStr一起变化,那就用copy。而对于要把NSString类型的字符串赋值给str,那两都没啥区别。不会影响安全性,内存管理也一样。OC 解决NSArray、NSDictionary直接打印中文出现乱码的问题
时间: 15:04:49
&&&& 阅读:2199
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&在iOS开发中,经常需要查看数组中得元素是否是自己想要的,但是苹果并没有对直接打印数组中得中文作处理,直接打印就会出现一堆很讨厌的东西,解决其实很简单,就是需要通过为NSArray添加分类,重写&- (NSString *)descriptionWithLocale:(id)locale方法即可
代码如下:
#import "NSArray+Log.h"
@implementation NSArray (Log)
- (NSString *)descriptionWithLocale:(id)locale
NSMutableString *str = [NSMutableString stringWithFormat:@"%lu (\n", (unsigned long)self.count];
for (id obj in self) {
[str appendFormat:@"\t%@, \n", obj];
[str appendString:@")"];
同理要解决NSDictionary乱码问题,也需要为NSDictionary类添加一个分类,重写&&- (NSString *)descriptionWithLocale:(id)locale方法
代码如下:
1 #import "NSDictionary+MyLog.h"
3 @implementation NSDictionary (MyLog)
6 - (NSString *)descriptionWithLocale:(id)locale
NSArray *allKeys = [self allKeys];
NSMutableString *str = [[NSMutableString alloc] initWithFormat:@"{\t\n "];
for (NSString *key in allKeys) {
id value= self[key];
[str appendFormat:@"\t \"%@\" = %@,\n",key, value];
[str appendString:@"}"];
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&国之画&&&& &&
版权所有 京ICP备号-2
迷上了代码!}

我要回帖

更多关于 ios nsstring 替换 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信