- 浏览: 904233 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (466)
- iPhone, iOS , Objective-c (155)
- 数据库 (20)
- 设计模式 (5)
- 第三方包管理,cocoapod (2)
- 版本管理, SVN, Subversion, Git (1)
- Google, Android, Java (14)
- Wordpress (1)
- 职业素养 (3)
- 版本管理,git (3)
- 前端小技巧 (2)
- flash (1)
- javascript (5)
- Ruby (0)
- 编程语言 (1)
- 网络常识 (1)
- 找到生活好感觉 (5)
- 产品经理 (1)
- markdown (1)
- 云服务器 (1)
- iPhone (116)
- iOS (116)
- Objective-c (116)
- 学习技巧 (2)
- Google (5)
- Android (6)
- Java (21)
- python (1)
- sqlite (3)
- node.js (2)
- mongodb (2)
- 学习技巧,阅读 (2)
- 软件测试 (3)
- 架构设计 (2)
- 设计 (1)
- Spring framework (3)
- junit (1)
- Linux (2)
- 软件 (1)
- Struts2 (1)
- 版本管理 (3)
- SVN (3)
- Subversion (3)
- Git (3)
- mysql (5)
- quartz (1)
- 无关技术 (1)
- 前端 (1)
- Redis (1)
- 产品管理 (0)
- 计算机常识 (1)
- 计算机科学 (0)
- swift (1)
- 服务器 (2)
- 搜索 (1)
- Scala (1)
- J2EE (1)
- maven (1)
- 前端css (1)
- 英语 (1)
- 消息队列 (1)
- kafka (0)
- apache kafka (4)
- netbeans (1)
- IDE (2)
- 歌词 (1)
- 过滤器实现 (1)
- linux vim vi (1)
- jmeter (1)
- springcloud (1)
最新评论
-
hujingnemo:
不知道为什么打不开
CHM如何改编字体大小 -
weiboyuan:
求答案 weiboyuanios@163.com
iOS软件工程师面试题(高级) -
xueji5368:
这个现在已经广泛使用了嘛!
RoboGuice入门 -
Yao__Shun__Yu:
...
CHM如何改编字体大小 -
353144886:
非常之详细 美女求认识
sqlite数据类型 datetime处理
今天写代码的时候,用stringByReplacingOccurrencesOfString后出现崩溃,代码如下:
NSString * s = [[NSString alloc] initWithFormat:@"1s"];
s = [s stringByReplacingOccurrencesOfString:@"s" withString:@"x"];
NSLog(@"%@",s);
[s release];
我当时就奇怪了,明明是alloc之后再release,到底哪里出错了?
于是猜测stringByReplacingOccurrencesOfString也许返回的是另外一个指针,也就是说指针s的值变了,不再指向它原来alloc的内存单元了。
实验代码如下:
NSString * s = [[NSString alloc] initWithFormat:@"1s"];
NSLog(@"%x",s);
s = [s stringByReplacingOccurrencesOfString:@"s" withString:@"x"];
NSLog(@"%x",s);
显示结果:
4e4b430
4e4bd40
两个地址真的不一样。然后前面的[s release];会出现崩溃,猜测返回的对象应该是autorelease的。下面三段实验代码:
第一段代码
NSString *s = [[NSString alloc] initWithFormat:@"1s"];
NSString *x = [s stringByReplacingOccurrencesOfString:@"s" withString:@"x"];
NSLog(@"S:%@,%x,retainCount:%d",s,s,[s retainCount]);
NSLog(@"X:%@,%x,retainCount:%d",x,x,[x retainCount]);
控制台打印结果:
S:1s,4b42fc0,retainCount:1
X:1x,4b42970,retainCount:1
由结果可以看到,s和x的retainCount都是1。下面加个autorelease,再看看效果。
第二段代码
NSString *s = [[NSString alloc] initWithFormat:@"1s"];
NSString *x = [[s stringByReplacingOccurrencesOfString:@"s" withString:@"x"] autorelease];
NSLog(@"S:%@,%x,retainCount:%d",s,s,[s retainCount]);
NSLog(@"X:%@,%x,retainCount:%d",x,x,[x retainCount]);
控制台打印结果会提示出错:
error for object 0x4b5ab60: double free
结果显示释放了两次。
第三段代码
NSString *s = [[NSString alloc] initWithFormat:@"1s"];
NSString *x = [s stringByReplacingOccurrencesOfString:@"s" withString:@"x"];
NSLog(@"S:%@,%x,retainCount:%d",s,s,[s retainCount]);
NSLog(@"X:%@,%x,retainCount:%d",x,x,[x retainCount]);
[x release];
运行后直接就崩溃了,设断点DeBug提示:Program received signal: “EXC_BAD_ACCESS”,说明有对象提早释放了。
因此,由上面三段代码应该可以看出stringByReplacingOccurrencesOfString函数返回的新对象是autorelease的。
NSString * s = [[NSString alloc] initWithFormat:@"1s"];
s = [s stringByReplacingOccurrencesOfString:@"s" withString:@"x"];
NSLog(@"%@",s);
[s release];
我当时就奇怪了,明明是alloc之后再release,到底哪里出错了?
于是猜测stringByReplacingOccurrencesOfString也许返回的是另外一个指针,也就是说指针s的值变了,不再指向它原来alloc的内存单元了。
实验代码如下:
NSString * s = [[NSString alloc] initWithFormat:@"1s"];
NSLog(@"%x",s);
s = [s stringByReplacingOccurrencesOfString:@"s" withString:@"x"];
NSLog(@"%x",s);
显示结果:
4e4b430
4e4bd40
两个地址真的不一样。然后前面的[s release];会出现崩溃,猜测返回的对象应该是autorelease的。下面三段实验代码:
第一段代码
NSString *s = [[NSString alloc] initWithFormat:@"1s"];
NSString *x = [s stringByReplacingOccurrencesOfString:@"s" withString:@"x"];
NSLog(@"S:%@,%x,retainCount:%d",s,s,[s retainCount]);
NSLog(@"X:%@,%x,retainCount:%d",x,x,[x retainCount]);
控制台打印结果:
S:1s,4b42fc0,retainCount:1
X:1x,4b42970,retainCount:1
由结果可以看到,s和x的retainCount都是1。下面加个autorelease,再看看效果。
第二段代码
NSString *s = [[NSString alloc] initWithFormat:@"1s"];
NSString *x = [[s stringByReplacingOccurrencesOfString:@"s" withString:@"x"] autorelease];
NSLog(@"S:%@,%x,retainCount:%d",s,s,[s retainCount]);
NSLog(@"X:%@,%x,retainCount:%d",x,x,[x retainCount]);
控制台打印结果会提示出错:
error for object 0x4b5ab60: double free
结果显示释放了两次。
第三段代码
NSString *s = [[NSString alloc] initWithFormat:@"1s"];
NSString *x = [s stringByReplacingOccurrencesOfString:@"s" withString:@"x"];
NSLog(@"S:%@,%x,retainCount:%d",s,s,[s retainCount]);
NSLog(@"X:%@,%x,retainCount:%d",x,x,[x retainCount]);
[x release];
运行后直接就崩溃了,设断点DeBug提示:Program received signal: “EXC_BAD_ACCESS”,说明有对象提早释放了。
因此,由上面三段代码应该可以看出stringByReplacingOccurrencesOfString函数返回的新对象是autorelease的。
发表评论
-
oc为啥不用try catch
2016-03-23 11:56 1404简单的来说,Apple虽然同时提供了错误处理(NSError) ... -
ReactiveCocoa笔记
2016-03-14 12:31 0为什么使用MVVM?为什么使用ReactiveCocoa? 概 ... -
PINCache
2016-01-19 15:11 948PINCache是线程安全的键值缓存框架,用来储存难以获取或重 ... -
Swift设计模式
2015-12-29 12:04 0Swift设计模式 -
Understanding Swift access control
2015-12-29 12:03 0Swift takes an unusual approuac ... -
cocoapods因GEM_HOME升级遇到问题解决办法
2015-12-17 14:40 926Installing CocoaPods on OS X 10 ... -
swift 闭包的比较写法
2015-12-16 11:10 755let names = ["Chris", ... -
iOS 生成二维码,生成条形码图片
2015-12-03 15:44 1472#pragma mark - 生成条形码以及二维码 // ... -
解决cocoapods 更新慢的问题
2015-11-23 17:01 756最近使用CocoaPods来添加第三方类库,无论是执行pod ... -
iOS中级面试题
2015-11-20 15:12 1182OneV‘s Den在博客里出了10道iOS面试题,用他的话是 ... -
cocoapods出错解决方法
2015-11-09 13:09 746自定义GEM_HOME $ mkdir -p $HOME/So ... -
oc时间从美国时间改到中国时间
2015-10-19 14:12 979_formatter = [[NSDateFormatt ... -
27个iOS开发库
2015-07-24 16:10 769超长慎入列表: DZNEmptyDataSet(UI,空表格 ... -
Values of type 'NSInteger' should not be used as format arguments; add an explic
2015-07-24 10:10 844Values of type 'NSInteger' shou ... -
iOS架构心得体会
2015-05-18 18:35 815好的架构不是设计出来的,而是进行出来的。 我的iOS工程架构 ... -
UICollectionView NSInternalInconsistencyException出现的原因
2015-05-11 11:32 3414'NSInternalInconsistencyExcepti ... -
XLForm-iOS表单库
2015-05-08 14:44 908XLForm是最灵活和强大的iOS类库,用于创建动态table ... -
Info.plist Utility Error: “Info.plist couldn't be opened because there is no suc
2015-05-06 16:13 689http://stackoverflow.com/questi ... -
iOS中Autolayout中各种情况的使用的width,height策略
2015-04-30 15:33 685可以总结为: 如果项目不支持横屏显示,使用w:Compac ... -
一句话加上下拉刷新
2015-04-29 18:22 770怎么一句话添加上拉刷新? https://github.co ...
相关推荐
但可以创建一个新的字符串,如使用`stringByAppendingString:`或`stringByReplacingOccurrencesOfString:withString:`方法。 六、字符串的比较 OC提供了多种比较字符串的方法: 1. `isEqualToString:`:检查两个...
4. **修改**:`stringByReplacingOccurrencesOfString:withString:`方法用于替换字符串中的某个子串。`str4=[str stringByReplacingOccurrencesOfString:@"sdgg" withString:@""];`将所有"sdgg"替换为空字符串,得到...
NSString *replacedStr = [str stringByReplacingOccurrencesOfString:@"World" withString:@"Objective-C"]; NSLog(@"Replaced: %@", replacedStr); // 输出: Hello, Objective-C! ``` 5. **字符串分割**:使用...
string = [string stringByReplacingOccurrencesOfString:@"-" withString:@""]; if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) { return NO; } text = [text ...
7. **去除空格和标点**:可能有`trimmingCharactersInSet:`用于去除首尾空白,或者`stringByReplacingOccurrencesOfString:withString:`去除特定字符。 8. **字符串加密解密**:如果扩展类涉及到安全,可能会包含MD...
= NSNotFound) { str = [str stringByReplacingOccurrencesOfString:@"World" withString:@"Universe" options:0 range:range]; }` 最后,遍历字符串可以使用`enumerateSubstringsInRange:options:usingBlock:`方法...
NSString *newFileName = [fileName stringByReplacingOccurrencesOfString:@"BC" withString:@"HK"]; NSString *newFilePath = [projectPath stringByAppendingPathComponent:newFileName]; NSError *error; ...
NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""]; if ([cleanString length] != 6) { return nil; } unsigned int red, green, blue; [[NSScanner ...
NSString *newStr = [original stringByReplacingOccurrencesOfString:@"Replace" withString:@"Don't"]; ``` 4. 分割字符串:`componentsSeparatedByString:`根据指定的分隔符将字符串拆分成数组。例如: ```objc ...
NSString *unescapedUnicodeStr = [unicodeStr stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U00"]; unescapedUnicodeStr = [unescapedUnicodeStr uppercaseString]; unescapedUnicodeStr = ...
5. **替换子字符串**:`stringByReplacingOccurrencesOfString:withString:`可以替换所有匹配的子字符串。 6. **格式化字符串**:`stringWithFormat:`允许使用类似于C语言的`printf`函数来动态创建字符串。 7. **...
return [(NSString *)string stringByReplacingOccurrencesOfString:@"-" withString:@""]; } ``` #### 功能描述 此方法用于生成一个随机的字符串(nonce),通常用于安全通信中的身份验证或会话管理。它通过生成一...
return [(NSString *)string stringByReplacingOccurrencesOfString:@"-" withString:@""]; } ``` 此函数通过创建一个UUID并移除其中的连字符“-”来生成Nonce值。UUID是一种保证全球唯一性的标识符,非常适合用于...
NSString *newStr = [str stringByReplacingOccurrencesOfString:@"Hello" withString:@"Hi"]; NSLog(@"New string: %@", newStr); NSString *concatStr = [str stringByAppendingString:@" again!"]; NSLog(@...
mobile = [mobile stringByReplacingOccurrencesOfString:@ withString:@]; if (mobile.length != 11) { return NO; }else{ /** * 移动号段正则表达式 */ NSString *CM_NUM = @^((13[4-9])|(14
mobile = [mobile stringByReplacingOccurrencesOfString:@ withString:@]; if (mobile.length != 11) { return NO; }else{ /** * 移动号段正则表达式 */ NSString *CM_NUM = @^((13[4-9])|(147)|(15[0-2,7...
前言 最近在一个二次开发的项目中看到了一段身份证验证的OC代码,虽然我一直讨厌... value = [value stringByReplacingOccurrencesOfString:@X withString:@x]; value = [value stringByTrimmingCharactersInSet:[NSC
responseString = [responseString stringByReplacingOccurrencesOfString:@"\r\n" withString:@""]; responseString = [responseString stringByReplacingOccurrencesOfString:@"\n" withString:@""]; ...