首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏iOS开发~

    iOS_runtime实现NSCoding NSCoder缓存对象 NSCoping

    <NSCoding>  当类中包含其他类似, 其他类也实现NSCoding就行 #pragma mark - 解档 - (id)initWithCoder:(NSCoder *)decoder { forKey:strName]; } free(ivar); } return self; } #pragma mark - 归档 - (void)encodeWithCoder:(NSCoder valueForKey:strName]; // 进行归档赋值 [encoder encodeObject:value forKey:strName]; } free(ivar); } NSCoder

    54320编辑于 2022-07-20
  • 来自专栏iOS 开发杂谈

    浅谈 NSUserDefaults

    (nonatomic, copy) NSString *age; @property (nonatomic, copy) NSString *name; - (id)initWithCoder:(NSCoder *)coder; - (void)encodeWithCoder:(NSCoder *)coder; @implementation Person - (id)initWithCoder:(NSCoder self.name = [coder decodeObjectForKey:@"name"]; } return self; } - (void)encodeWithCoder: (NSCoder

    81160发布于 2018-09-30
  • 来自专栏日常技术分享

    利用Runtime实现NScoding

    最近项目需要缓存,因为项目都是用的对象,要缓存对象必须实现NSCoding协议,但是每个Model都要实现 - (void)encodeWithCoder:(NSCoder*)aCoder - (id )initWithCoder:(NSCoder*)aDecoder 假如对象有100个属性现实NScoding协议是一件很繁琐的事情,幸好Runtime能很好的解决这个问题。 实现的思路写一个BaseModel,在BaseModel里实现  - (void)encodeWithCoder:(NSCoder*)aCoder - (id)initWithCoder:(NSCoder

    36510发布于 2018-09-13
  • 来自专栏技术总结

    iOS进阶之runtime作用

    age forKey:kage]; [aCoder encodeObject:_others forKey:kothers]; } - (instancetype)initWithCoder:(NSCoder implementation NSObject (ArchiveExtension) // 先对当前类进行编码,然后对父类进行编码,如果父类是NSObject就结束编码 - (void)encode:(NSCoder :key]; } free(ivars); c = [c superclass]; } } - (void)decode:(NSCoder ivars); c = [c superclass]; } } @end 这时,可以在DWPerson.m中取代之前的代码 - (void)encodeWithCoder:(NSCoder *)aCoder { [self encode:aCoder]; } - (instancetype)initWithCoder:(NSCoder *)aDecoder { if (

    82390发布于 2018-05-22
  • 来自专栏宜达数字

    iOS开发--常用的数据存储方式

    NSObject<NSCoding> @property (nonatomic, strong)NSString *name; // 协议里面的方法: - (void)encodeWithCoder:(NSCoder *)aCoder; // 归档 - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder; // 解档 // 存储name属性 - (void )encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:_name forKey:@"name"]; } // 读取name属性并赋值 - (instancetype)initWithCoder:(NSCoder *)aDecoder { if (self = [super init]) {

    1.1K20发布于 2020-06-02
  • 来自专栏DannyHoo的专栏

    iOS开发中利用YYModel进行归档

    实际代码也很简单,只需在自定义类中重写方法: (void)encodeWithCoder:(NSCoder*)aCoder { [self yy_modelEncodeWithCoder:aCoder ]; } (id)initWithCoder:(NSCoder*)aDecoder { self = [super init]; return [self yy_modelInitWithCoder:

    1.4K20发布于 2018-09-13
  • 来自专栏DannyHoo的专栏

    利用runtime进行归档解档

    "Person.h" @interface Person ()<NSCoding> @end @implementation Person - (void)encodeWithCoder:(NSCoder forKey:@"name"];     [aCoder encodeObject:_age forKey:@"age"]; } - (instancetype)initWithCoder:(NSCoder /runtime.h> @interface Person()<NSCoding> @end @implementation Person - (void)encodeWithCoder:(NSCoder encodeObject:[self valueForKey:key] forKey:key];     } } - (nullable instancetype)initWithCoder:(NSCoder

    52220发布于 2018-09-13
  • 来自专栏大话swift

    YYModel使用的小技巧

    n.timeIntervalSince1970);return YES;} 3 Coding/Copying/hash/equal/description - (void)encodeWithCoder:(NSCoder *)aCoder { [self yy_modelEncodeWithCoder:aCoder]; } - (id)initWithCoder:(NSCoder *)aDecoder { self = YYModelCommon - (NSString *)description {\ return [self modelDescription];\}\- (void)encodeWithCoder:(NSCoder *)aCoder {\ [self modelEncodeWithCoder:aCoder];\}\- (id)initWithCoder:(NSCoder *)aDecoder {\ self =

    1.8K20发布于 2019-11-20
  • 来自专栏一“技”之长

    iOS数据持久化之二——归档与设计可存储化的数据模型基类

    才能在这个协议的约束下进行正确的归档与解归档,这个协议就是NSCoding协议,我们可以先来看一下NSCoding中的内容: @protocol NSCoding - (void)encodeWithCoder:(NSCoder  *)aCoder; - (id)initWithCoder:(NSCoder *)aDecoder; @end 这个协议非常简单,一个init的归档方法,一个encode的解归档方法,NSCoder 可以看出,正是我们前边说过的,必须遵守归档协议的对象,才可以被归档,我们在MyObject类中实现如下两个方法: //解档方法 - (instancetype)initWithCoder:(NSCoder 2、基类模型的设计         我们新建一个BaseModel类,核心方法如下: //归档与解归档的方法 - (instancetype)initWithCoder:(NSCoder *)coder stringWithFormat:@"c%@",key]] forKey:key];         }     }     return self; } - (void)encodeWithCoder:(NSCoder

    1.4K30发布于 2018-08-16
  • 来自专栏谈补锅

    UITableViewController和延时执行、自定义控件

    instancetype)initWithFrame:(CGRect)frame; //使用xib创建或者用拖控件的方式创建自定义View对象,会调用到重写的- (instancetype)initWithCoder:(NSCoder  *)aDecoder; - (instancetype)initWithCoder:(NSCoder *)aDecoder; 举例: - (instancetype)init{ NSLog(@ { NSLog(@"initWithFrame ... 222"); } return self; } - (instancetype)initWithCoder:(NSCoder

    84440发布于 2018-09-27
  • 来自专栏進无尽的文章

    RunTime 之其他实践运用

    NSArray *)ignoredNames { return @[@"_aaa",@"_bbb",@"_ccc"]; } // 归档调用方法 - (void)encodeWithCoder:(NSCoder encodeObject:@(self.age) forKey:@"_age"]; } free(ivars); } // 解档方法 - (instancetype)initWithCoder:(NSCoder *)aCoder; - (void)decode:(NSCoder *)aDecoder; @end NSObject+Extension.m #import "NSObject+Extension.h " #import <objc/runtime.h> @implementation NSObject (Extension) - (void)decode:(NSCoder *)aDecoder setValue:value forKey:key]; } free(ivars); c = [c superclass]; } } - (void)encode:(NSCoder

    1.3K30发布于 2018-09-12
  • 来自专栏编程之旅

    iOS开发——数据持久化之归档

    - (void)encodeWithCoder:(NSCoder *)aCoder; - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder 该协议允许复制对象,遵循该协议要实现- (id)copyWithZone:(nullable NSZone *)zone;方法 下面我们来看归档协议方法的实现 -(void)encodeWithCoder:(NSCoder aCoder encodeObject:_version forKey:@"version"]; } 接下来是解档的协议方法实现 - (nullable instancetype)initWithCoder:(NSCoder

    82010发布于 2018-08-30
  • 来自专栏娱乐心理测试

    NSUserDefaults数据保存报错:Attempt to set a non-property-list object.

    end PaymentModel.m #import "PaymentModel.h" @implementation PaymentModel - (void)encodeWithCoder:(NSCoder forKey:@"title"]; [aCoder encodeObject:self.picture forKey:@"picture"]; } - (id)initWithCoder:(NSCoder

    1.3K30发布于 2018-08-02
  • 来自专栏DannyHoo的专栏

    iOS开发中利用MJExtension进行归档

    1.在自定义类中写一个宏MJCodingImplementation,此宏是实现了- (id)initWithCoder:(NSCoder )decoder方法和- (void)encodeWithCoder :(NSCoder )encoder方法。

    89120发布于 2018-09-13
  • 来自专栏進无尽的文章

    编码篇-持久化NSUserDefaults

    让这个自定义类实现<NSCoding>协议中的 - (id) initWithCoder: (NSCoder *)coder方法和 - (void) encodeWithCoder: (NSCoder copy,nonatomic)NSString *ageStr; @end #import "Test.h" @implementation Test - (id) initWithCoder: (NSCoder self.ageStr = [coder decodeObjectForKey:@"ageStr"]; } return self; } - (void) encodeWithCoder: (NSCoder

    1.6K10发布于 2018-09-12
  • 来自专栏hrscy

    将所有对象存到数据库中在Shop.m中

    如下面的例子: 在Shop.m中 #import "Shop.h" @implementation Shop #pragma mark 编码 -(void)encodeWithCoder:(NSCoder [enCoder encodeDouble:self.price forKey:@"price"]; } #pragma mark 解码 - (instancetype)initWithCoder:(NSCoder

    2.3K20发布于 2018-08-30
  • 来自专栏ios技术安装

    Swift 类构造器的使用

    于是开心地双击, 然后呢, Xcode 在我们的屏幕中自动生成了这些东西: Swift 复制代码 required init(coder aDecoder: NSCoder) { fatalError 而 init(coder aDecoder: NSCoder) 方法是来自父类的指定构造器, 因为这个构造器是 required, 必须要实现. ) { super.init(style: .Default, reuseIdentifier: nil) } required init(coder aDecoder: NSCoder ) { super.init(style: .Default, reuseIdentifier: nil) } required init(coder aDecoder: NSCoder () { self.init(style: .Default, reuseIdentifier: nil) } required init(coder aDecoder: NSCoder

    2.3K20发布于 2020-09-27
  • 来自专栏java架构1+1

    OC史上最实用的runtime总结,面试、工作你看我就足够了

    decodeObjectForKey:@"_age"]; } free(ivars); } return self; } // 归档调用方法 - (void)encodeWithCoder:(NSCoder *)aCoder; - (void)decode:(NSCoder *)aDecoder; @end NSObject+Extension.m #import "NSObject+Extension.h " #import <objc/runtime.h> @implementation NSObject (Extension) - (void)decode:(NSCoder *)aDecoder ]; [self setValue:value forKey:key]; } free(ivars); c = [c superclass]; } } - (void)encode:(NSCoder - (NSArray *)ignoredNames { return @[@"bone"]; } // 在系统方法内来调用我们的方法 - (instancetype)initWithCoder:(NSCoder

    1.8K20发布于 2019-06-17
  • 来自专栏我杨某人的青春满是悔恨

    设计模式之创建型模式

    (coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } (coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } //MARK (coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } (coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } (coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }

    1.1K40发布于 2018-09-10
  • 来自专栏向治洪

    使用Kotlin Native技术开发iOS应用

    kotlinx.cinterop.ExportObjCClass import kotlinx.cinterop.ObjCAction import kotlinx.cinterop.ObjCOutlet import platform.Foundation.NSCoder kotlinx.cinterop.initBy @ExportObjCClass class ViewController: UIViewController { constructor(aDecode:NSCoder ): super(aDecode) override fun initWithCoder(aDecode:NSCoder) =initBy(ViewController(aDecode))

    2.6K30编辑于 2022-11-30
领券