用运行时,以后这两个方法可以到处拷贝,不需要添加N行的重复代码,也不用担心属性变化后这里忘记修改。
class_copyPropertyList(【self class】, &count), 这个方法只是取本类的属性,如b继承于a,在a中执行- (id)initWithCoder:(NSCoder*)aDecoder方法,这个时候self始终是b,不会列出a中的属性。必须在b中也实现- (id)initWithCoder:(NSCoder*)aDecoder方法。同时a中写法是:class_copyPropertyList(【self superclass】, &count)。不同类型的属性,都可用id propertyValue = [aDecoder decodeObjectForKey:propertyName]; [self setValue:propertyValue forKey:propertyName];解档。