例如你使用mutable string做为“MyStringDefault”的值,当你做使用stringForKey:方法获取的值,这个值仍然是不可变的。...NSUserDefaults是单例,同时也是线程安全的 NSUserDefaults 的使用 简便方法存取不同类型数据 由上边的例子可以看到一个方法-setInteger:,这跟常用的-setObject...其实,NSUserDefaults提供了若干简便方法可以存储某些常用类型的值,例如: - setBool:forKey: - setFloat:forKey: - setInteger:forKey:...*)coder方法 然后把该自定义的类对象编码到NSData中,再从NSUserDefaults中进行读取。...,否则就会抛出异常 将数据储入plist文件中 写入文件方法:writeToFiel:对象调用方法 - (void)writeDataToPlist :(NSString *)dataKey :(id
NSDictionary中和键(key)关联的值(value)可以是任何对象类型,但不能是nil NSDictionary是不可变的,一旦初始化完毕,里面的内容就无法修改 2.NSDictionary...NSMutableDictionary的常见操作 添加/修改一个键值对(如果aKey之前有值,则会把aKey之前对应的值给替换掉)- (void)setObject:(id)anObject forKey...dict = [NSMutableDictionary dictionary]; [dict setObject:@"Walkers" forKey:@"name"]; NSLog(@"%@", dict...); [dict setObject:@"abc" forKey:@"name"]; NSLog(@"%@", dict); 输出结果: { name = Walkers; } {...NSMutableDictionary的简写 以前设置键值对方式 [dict setObject:@"Jack" forKey:@"name”]; 现在设置键值对方式 dict[@"name"] = @
objectForKey:返回与键值关联的对象 setObject: forKey: 在缓存中设置指定键名对应的值。...与可变字典不同的是,缓存对象不会对键名做copy操作 setObject: forKey: cost: 在缓存中设置指定键名对应的值,并且指定该键值对的成本。...当出现内存警告,或者超出缓存的成本上限时,缓存会开启一个回收过程,删除部分元素 removeObjectForKey:删除缓存中指定键名的对象 removeAllObjects:删除缓存中的所有对象 委托方法...cache: willEvictObject: 缓存将要删除对象时调用,不能在此方法中修改缓存。...NSString *str = [NSString stringWithFormat:@"cache - %d", I]; [self.myCache setObject
很明显前者为不可变词典,后者为可变词典。...1.创建不可变词典 [NSDictionary dictionaryWithObjectsAndKeys:..] : 使用键值对儿直接创建词典对象,结尾必需使用nil标志结束。...[dictionary setObject: @"雨松MOMO" forKey: @"name"] :向可变的词典动态的添加数据,这里的key是name 值是雨松MOMO。...:@"雨松MOMO" forKey:@"name"]; [dictionary setObject:@"15810463139" forKey:@"number"];...采用(适配)快速枚举 如果一个类的实例提供了访问其它对象集合的方法,那么这个类就可以采用 NSFastEnumeration 协议.
一、数组 1.不可变的数组 NSArray 数组是有序对象的集合,用来存储对象的有序列表,在OC中数组中必须存的是对象,不能是基本数据类型,若想存入基本数据类型...: +(id) dictionaryWithCapacity : (NSUInteger) num; 给可变字典添加对象:-(void) setObject(id) obj forKey...:@"value1" forKey:@"key1"]; [mulDictionary setObject:@"value2" forKey:@"key2"]; [mulDictionary setObject...:@"value3" forKey:@"key3"]; [mulDictionary setObject:@"value4" forKey:@"key4"]; //通过键删除值 [mulDictionary...1.不可变集合NSSet (1)NSSet的初始化和其他集合类一样也有其对应的便利初始化方法和便利构造器,
initWithObjectsAndKeys: 使用键值对初始化字典,也用nil来表示结束. dictionary count 计算其字典的长度. dictionary keyEunmerator 将key...[pool release]; return retVal; } 2.NSMutableDictionary是NSDictionary的子类,因此也继承其有的方法...[NSMutableDictionary initWithCapacity: 10]; //初始化长度为10; [dictionary setObject:~ forKey;~]; //x向可变的字典中添加数据...NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //添加我们的测试代码 //创建词典对象...:@"被添加的value1" forKey:@"key1"]; [dictionary setObject:@"被添加的value2" forKey:@"key2"
传入der格式的带有公钥的证书,该方法从证书中获取公钥 @param filePath 二进制编码的der格式带公钥的证书 @return 公钥对象 */ + (SecKeyRef)getPublicKeyRefWithContentsOfFile...返回加密以后的字符串 */ + (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey{ //1.调用核心方法将待加密的字符串转化成二进制数据...pubKey){ return nil; } //1.将PEM格式的public key数据生成SecKeyRef对象 SecKeyRef keyRef = [self...withKeyRef:keyRef]; } /** 将PEM格式public key的string创建SecKeyRef对象 @param key PEM格式public key的string...value值,就是最后的内容 return ([NSData dataWithBytes:&c_key[idx] length:len - idx]); } /** 使用SecKeyRef对象加密核心方法
有用的方法 NSArray的大多数方法使用isEqual:来检查对象间的关系(例如containsObject:)。...如果通过setObject:forKey使用toll-free桥接的CFDictionary,苹果增加了额外处理逻辑来使键被拷贝。...反过来这个结论则不成立 — 转换为CFDictionary的NSDictionary对象,对其使用CFDictionarySetValue()方法会调用回setObject:forKey并拷贝键。...在iOS 4/Snow Leopard中加入,默认为可变并且线程安全的。这使它很适合缓存那些创建起来代价高昂的对象。它自动对内存警告做出反应并基于可设置的成本清理自己。...NSCache对象不拷贝键的原因在于,很多时候键都是不支持拷贝操作的对象来充当的。
:forKey:方法就可以解决问题了 */ - (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g; //根据...的限制 当NSCache缓存的对象的总cost值大于这个值则会自动释放一部分对象直到占用小于该值 非严格限制意味着如果保存的对象超出这个大小也不一定会被删除 这个值就是与前面setObject:forKey...,将NSCache中的所有缓存对象都清空了。...NSUInteger cost = SDCacheCostForImage(diskImage); //调用NSCache的setObject:forKey:cost方法设置要缓存的对象...setObject:forKey:cost方法的时间复杂度是常量的,所以哪怕内存中有也无所谓 [self.memCache setObject:diskImage forKey:key
standardDefaults = [NSUserDefaults standardUserDefaults]; 写入数据 NSString *string = @"hahaha"; [standardDefaults setObject...standardUserDefaults]; if ([standardDefaults stringForKey:@"favoriteColor"] == nil) { [standardDefaults setObject...,完全可以将这个方法的调用放到 applicationDidFinishLaunching: 方法中,这个方法永远都不会覆盖用户设置的值。...但是并不是所有类型的对象都能够直接放入 NSUserDefaults,NSUserDefaults 只支持 Foundation 类型的对象,如果自定义 NSObject 对象存入 NSUserDefaults...init]; NSData *personData = [NSKeyedArchiver archivedDataWithRootObject:person]; [standardDefaults setObject
a> 它是可变的;b> 可以在添加value的时候对value进行复制;c> 可以通过弱引用来持有keys和values,所以当key或者value被deallocated的时候,所存储的实体也会被移除...NSMapTable的缓存,为了方便阅读,我删除了线程安全的代码 - (void)setObject:(id)obj forKey:(id)key cost:(NSUInteger)g { //...先将对象缓存的 NSCache 中 [super setObject:obj forKey:key cost:g]; if (key && obj) { // 如果存在...key和value,则再存到NSMapTable中 [self.weakCache setObject:obj forKey:key]; } } // 从该方法中,我们可以看到两次的获取缓存...SDImageCache 方法预览
2.它是线程安全对象,你可以在其他线程增加,删除和查询Cahe 不需要加锁 3.不像NSMutableDictionary 对象,cache不会复值添加到它里面的对象 属性和方法的介绍 缓存的名称...{ get set } 获取对象的值 func object(forKey key: KeyType) -> ObjectType?...设置缓存的值 setObject(ObjectType, forKey: KeyType) 移除对象 removeObject(forKey: KeyType) func removeAllObjects...() 设置值并且设置它消耗的值 func setObject(_ obj: ObjectType, forKey key: KeyType, cost g: Int) 应用实战 设置缓存的最大数量...Optional(swift3_0.Dog) 执行了isContentDiscarded Optional(swift3_0.Dog) 执行了isContentDiscarded 第三步 将缓存的对象丢弃掉
要点如下: 参数类型确认 NSDictionary NSArray等ObjectC对象的构造和复制 ObjectC 类方法和对象方法的调用 附送福利, ObjectC的nil 参数如何构造 二、步骤 参考...).init(); param_dict.setObject_forKey_(body,"body"); 那 NSArray呢?...吾道不孤,同道还是比较多的,遇到的问题也一样,大胡子说你要在参数结尾加个 nil 但是这个nil怎么加也是个问题呀。 再搜搜 #nil# ,有个同道提供了一个方法, 搞起来。..._(body,"body"); param_dict.setObject_forKey_(client,"client"); param_dict.setObject_forKey_(clientVersion...,"clientVersion"); param_dict.setObject_forKey_(functionId,"functionId"); param_dict.setObject_forKey
Objective-C中通过下标的方式访问自定义数据模型中属性 在Objective-C中,可以通过下标来访问数组中的元素,如果数组是NSMutableArray类型的可变数组,则还可以通过下标来对数组中的元素进行赋值操作... array[0] = @"one"; NSString * str = array[0]; NSLog(@"%@",str); 对于Objective-C中的字典对象...,虽然官方文档上没有提及,实际上,可以通过实现一些方法,来使自定义的数据模型支持使用下标来进行访问。 ... return [self valueForKey:[NSString stringWithFormat:@"_index%lu",idx]]; } //通过下标设置属性值 - (void)setObject...:(id)object forKeyedSubscript:(id )aKey{ [self setValue:object forKey:aKey]; } @end
1.面向对象的sqlite管理类的设计思路 为了便于使用,在设计时,我们尽量将libsqlite3中的方法不暴漏在使用层,通过面向应用的接口来进行方法的设计,设计思路类图如下: ?...图中,文件管理中心对文件进行存取删改管理,不暴漏在外,数据库管理中心负责对数据库的创建,删除打开等操作,具体的数据操作由数据库操作对象来完成。... 将操作数据库的核心方法封装在这个类中: YHBaseSQLiteContext.h /** *操作的数据库名称 */ @property(nonatomic,strong)NSString...complete; /** * @brief 删除数据 * * @param tableName 表名 * * @param wlStr 条件字符串 一般通过主键找到对应数据删除 可以为nil 不传这个参数将删除所有数据...cString:"NULL" encoding:NSUTF8StringEncoding]; [dic setObject:value forKey:keys[i
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 设置HTTP方法为...:@"cgrfsf" forKey:(NSString *)kCFNetworkProxiesHTTPEnable]; [proxyDict setObject:@"5445" forKey...:(NSString *)kCFNetworkProxiesHTTPPort]; [proxyDict setObject:@"16QMSOML" forKey:(NSString *)kCFNetworkProxiesHTTPProxy...]; [proxyDict setObject:@"280651" forKey:(NSString *)kCFNetworkProxiesHTTPProxyUsername];...[proxyDict setObject:@"280651" forKey:(NSString *)kCFNetworkProxiesHTTPProxyPassword];
还记得我们如何使用mutating关键字来修改结构方法的属性吗?...即使类内的某个属性值发生变化,但@State不监听这些,所以视图不会被重新加载。...将存储在别处的值语意的属性转换为引用语义,在使用时需要在变量名加$符号。...showFavorited: Bool引用传入参数 注释4,当切换开关后,由于@Binding机制的作用,会修改外层的单一数据源(single source of truth),所以列表中展示的内容会不断根据条件进行过滤 可变和不可变...计算属性setter 在setter属性中,self默认是mutating,可以被修改;我们不能给一个不可变的量赋值,可以通过声明setter nonmutating使属性可赋值,这个nonmutating
文中会讲述几点小技巧:图文混排、动态计算文字长度、图片拉伸方法。...pathForResource:@"emoticons" ofType:@"plist"]; NSArray*face = [NSArray arrayWithContentsOfFile:filePath]; 第二步,将字符串转换为可变属性字符串...= [rematchesInString:text options:0 range:NSMakeRange(0, text.length)]; 数组中都是NSTextCheckingResult对象...([face[i][@"cht"] isEqualToString:subStr]) { //face[i][@"png"]就是我们要加载的图片 //新建文字附件来存放我们的图片,iOS7才新加的对象...:imageStr forKey:@"image"]; [imageDic setObject:[NSValuevalueWithRange:range] forKey:@"range"]; //把字典存入数组中
字符串和block使用 copy 对于一些弱引用对象使用weak 对于需要赋值内存对象 copy h头文件方法写法 写法模板 @interface 方法的参数在一排显示 方法之间保留一行...]; [userDefault objectForKey:@"startLoad"] [userDefault setObject:@() forKey:@"startLoad"] 方法的参数连接不能有空格...可以使用Xcode插件自动生成 属性越多会加重手写代码的长度 尽可能使用不可变的对象 对于OC存在很多可变的对象 比如NSMutableString NSMutableArray NSMutableDictionary...等等 对于一些不允许改变的直接使用不可变对象 可以节省对象开支 还可以防止别人修改数据造成bug 建议的写法 NSArray *sexList = @[@"男",@"女"]; 不建议的写法 NSMutableArray...setObject:object forKey:key]; 尤达表达式 推荐: if ([myValue isEqual:@42]) { ...
home = NSHomeDirectory(); NSString *documents = [home stringByAppendingPathComponent:@"Documents"]; // 不建议采用...所以调用了set方法之后数据有可能还没有写入磁盘应用程序就终止了。...出现以上问题,可以通过调用synchornize方法强制写入 - (BOOL)synchronize; 偏好设置的好处 1、不用关心文件名 2、快速的进行键值对存储 偏好设置的工具方法 ---- +...(void)setObject:(id)value forKey:(NSString *)key{ [[NSUserDefaults standardUserDefaults] setObject...:model]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:ModelKey]; unarchiveObjectWithData
领取专属 10元无门槛券
手把手带您无忧上云