nsstring

[非凡程序员]文件管理 NSFileManager NSFileHandle

前提是你 提交于 2020-03-02 03:00:32
NSFileManager 主要用于文件 NSFileHandle 主要用于文件内容 在终端输入UNIX命令 cd 切换目录 touch 创建文件 mkdir 创建目录 clear 清屏 ls 查看当前目录下的所有文件 ls -l 查看当前目录下所有文件的属性(只读、只写、可读可写) 更改一个文件的属性: chmod 777 文件名.文件类型 (最大权限) NSFileManager 创建文件(有的话可以不用创建) 关键字:createFileAtPath: [fileManager createFileAtPath:<#(NSString *)#> contents:<#(NSData *)#> attributes:<#(NSDictionary *)#>] 第一个参数是创建文件的路径地址 第二个参数是文件内容的名字 第三个参数是nil 创建目录 关键字:createDirectoryAtPath: [fileManager createDirectoryAtPath:<#(NSString *)#> withIntermediateDirectories:<#(BOOL)#> attributes:<#(NSDictionary *)#> error:<#(NSError *__autoreleasing *)#>] 第一个参数是创建目录的路径地址 第二个参数是BOOL类型的

@property的中的关键字特性

╄→гoц情女王★ 提交于 2020-03-01 19:43:45
@property还有一些关键字,它们都是有特殊作用的,比如上述代码中的nonatomic,strong: @property(nonatomic,strong) NSString *carName; @property(nonatomic,strong) NSString *carType; 我把它们分为三类,分别是:原子性,存取器控制,内存管理。 原子性 atomic(默认):atomic意为操作是原子的,意味着只有一个线程访问实例变量。atomic是线程安全的,至少在当前的存取器上是安全的。它是一个默认的特性,但是很少使用,因为比较影响效率,这跟ARM平台和内部锁机制有关。 nonatomic:nonatomic跟atomic刚好相反。表示非原子的,可以被多个线程访问。它的效率比atomic快。但不能保证在多线程环境下的安全性,在单线程和明确只有一个线程访问的情况下广泛使用。 存取器控制 readwrite(默认):readwrite是默认值,表示该属性同时拥有setter和getter。 readonly: readonly表示只有getter没有setter。 有时候为了语意更明确可能需要自定义访问器的名字: @property (nonatomic, setter = mySetter:,getter = myGetter ) NSString *name;

Objective C中定义可变参函数

跟風遠走 提交于 2020-03-01 16:35:43
Objective C中有很多不定参函数,例如NSLog(format, arg1, arg2),还有字符串或数组在构造时所用的[NSString stringWithFormat: format, arg1, arg2, arg3],它们的方法原型分别是: FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); + (id)stringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2); - (void) doLog:(NSString *)formatStr, ... { if (!formatStr) return; va_list arglist; va_start(arglist, formatStr); NSString *outStr = [[[NSString alloc] initWithFormat:formatStr arguments:arglist] autorelease]; va_end(arglist); NSLog(@"%@", outStr); } va_list、va_start、va_end正是处理不定参数的关键。 - (void) doLog:(NSString *

关键字(nonatomic/atomic)、(copy/retain/assign/strong/weak )、(readonly / readwrite)、(@property/@

落花浮王杯 提交于 2020-03-01 04:00:01
property关键字:设置成员变量的属性(有读/写,赋值assign,retain,copy ,以及对多线程的支持nonatomic) (1)nonatomic/atomic atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。 atomic :原子性访问,设置成员变量的@property属性时,默认为atomic,提供多线程安全。 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样: {lock} if (property != newValue) { [property release]; property = [newValue retain]; } {unlock} nonatomic :非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。 atomic是Objc使用的一种线程保护技术,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定 nonatomic ,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。基本上来讲

NSString属性什么时候用copy,什么时候用strong?

…衆ロ難τιáo~ 提交于 2020-03-01 03:59:18
我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):strong与copy。那这两者有什么区别呢?什么时候该用strong,什么时候该用copy呢?让我们先来看个例子。 示例 我们定义一个类,并为其声明两个字符串属性,如下所示: @interface TestStringClass () @property (nonatomic, strong) NSString *strongString; @property (nonatomic, copy) NSString *copyedString; @end 上面的代码声明了两个字符串属性,其中一个内存特性是strong,一个是copy。下面我们来看看它们的区别。 首先,我们用一个不可变字符串来为这两个属性赋值, - (void)test { NSString *string = [NSString stringWithFormat:@"abc"]; self.strongString = string; self.copyedString = string; NSLog(@"origin string: %p, %p", string, &string); NSLog(@"strong string: %p, %p", _strongString, &_strongString); NSLog

理解 retain 、copy 、NSMutableString 、NSString 的用法

社会主义新天地 提交于 2020-03-01 03:30:55
copy为内容拷贝,retain为指针拷贝,NSMutableString为可变字符串,NSString为不可变字符串。 但并不表示这个对象声明的变量的值不可变,而是表示它初始化以后,你不能改变该变量所分配的内存中的值,但你可以重新分配该变量所处的内存空间。而NSMutableString是可变的,意味着你可以追加它的内存空间,或者修改它所分配的内存空间中的值。 "NSString *"这个数据类型代表一个NSString对象的指针,不是NSString对象本身。 "NSMutableString *"这个数据类型则是代表"NSMutableString"对象本身,这两者是有区别的。 这也是有的时候我们使用NSMutableString类型字符串时,要使用copy的原因,因为可能不想改变新的字符串时影响到旧的字符串的值。 不管是retain还是copy对于NSString来说都是浅拷贝,还是指向的之前的内存区域。 @property (retain, nonatomic) NSString *retainStr; @property (copy, nonatomic) NSString *copyStr; @property (retain, nonatomic) NSMutableString *retainMStr; @property (copy, nonatomic)

NSMutableString的总结

我的未来我决定 提交于 2020-03-01 03:30:22
一.NSMutableString的基本概念 1.NSMutableString是可变字符串,是NSString的子类 2.NSString是不可变的,里面的文字内容是不能修改的 3.NSMutableString是可变的,里面的内容可以随时修改 4.NSMutableString可以使用NSString的所有方法 二.NSMutableString的初始化 //1.NSString的初始化方式都可以用在NSMulString NSMutableString *str = [NSMutableString stringWithFormat:@"%d",233]; NSMutableString *str2 = [NSMutableString stringWithUTF8String:"2333"]; //2.空字符的初始化 NSString *str3 = @"123456789"; //可变的空字符串 NSMutableString *str4 = [NSMutableString string]; //3.不可变字符串转可变 NSMutableString *str5 = [NSMutableString stringWithString:str3]; //完全等同 NSMutableString *str6 = [str3 mutableCopy]; 三.拼接字符串 -

NSString ,NSMutableString用法以及一些常用方法

你说的曾经没有我的故事 提交于 2020-03-01 03:08:22
1、NSString的用法 //1、创建常量字符串。 NSString *string1 = @"这是一个NSString对象"; //2、创建空字符串,给予赋值。实例化一个对象 NSString *string2 = [[NSString alloc] init]; NSString *string = [NSString string]; //3、综合1、2方法,提升性能:initWithString方法 NSString *string3 = [[NSString alloc] initWithString:@"This is a string3"]; NSString *string = [NSString stringWithString:@"创建一个字符串"]; // 用这种方法xcode会让你修改为创建一个字符串常量的结构 //4、用标准C语言字符串创建OC字符串:initWithCString方法(注意编码方式参数的选择) char *string4c = "This is a C String!中文也支持"; NSString *string4 = [[NSString alloc] initWithCString:string4c encoding:NSUTF8StringEncoding]; // 这种创建方式在从网上获取数据出现“乱码”时

iOS字符串NSString中去掉空格(或替换为某个字符串)

狂风中的少年 提交于 2020-03-01 02:43:19
问题描述】 今天请求服务器返回的字段中含有空格,这空格是服务器开发人员不小心往数据中多敲了,所以在客户端需要把字符串中的空格过滤掉。 【问题分析】 1、使用NSString中的 stringByTrimmingCharactersInSet :[NSCharacterSet whitespaceCharacterSet]]方法只是去掉左右两边的空格; 2、使用NSString *strUrl = [urlString stringByReplacingOccurrencesOfString :@" " withString:@""];可以去掉空格,注意此时生成的strUrl是autorelease属性的,所以不必对strUrl进行release操作! 【问题小结】 用stringByReplacingOccurrencesOfString方法去掉空格,实际上只是做了字符替换操作,除了空格还可以替换其它字符。 来源: oschina 链接: https://my.oschina.net/u/2547038/blog/599306

你真的了解UITableViewCell重用吗?

徘徊边缘 提交于 2020-02-29 16:41:03
一:首先查看一下关于UITableViewCell 重用的定义 - (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier; - (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0); 在tableview 新建的时候, 会新建一个复用池(reuse pool). 这个复用池可能是一个队列, 或者是一个链表, 保存着当前的Cell.pool 中的对象的复用标识符就是reuseIdentifier, 标识着不同的种类的cell. 所以调用dequeueReusableCellWithIdentifier: 方法获取cell. 从pool 中取出来的cell 都是tableview 展示的原型. 无论之前有什么状态, 全部都要设置一遍. 在 UITableView创建同时 ,会创建一个空的复用池 .之后 UITableView在内部维护这个复用池 .一般情况下 ,有两种用法 ,一种是在取出一个空的 cell的时候再新建一个