20150624_OC之协议与自定义类型的归档
来源:互联网 发布:从来绝色知难得打一字 编辑:程序博客网 时间:2024/06/05 07:16
协议例子1://// main.m// IOS150624_ObjectiveC_协议语句//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>#import "Programmer.h"//****************************//* 协议 *//****************************//协议:约定双方相互遵守的规范//计算机中:http:// ftp:// smb:// tcp//OC中的协议:一组方法的列表//1.定制协议(只做方法的声明,不去实现)//在Foundation中所有的协议直接或者间接的遵守NSObject协议//@protocol Coder <NSObject>////- (void)writeCode;//- (void)debugCode;//- (void)report;////@end//遵守协议,协议名放在<>中,遵守多个协议,协议之间用逗号隔开//@interface Programmer : NSObject <Coder,NSCopying>////@end//3.实现协议(实现协议中的方法),由遵守协议的类实现.协议中的方法默认是必须实现//@implementation Programmer//- (void)writeCode//{// //}//- (void)debugCode//{// //}//- (void)report//{// //}////- (id)copyWithZone:(NSZone *)zone//{// return self;//}////@end//4.使用协议int main(int argc, const char * argv[]) { @autoreleasepool { Programmer *xiaoZhang = [[Programmer alloc]init]; xiaoZhang.name = @"小张"; NSLog(@"%@",xiaoZhang.name); [xiaoZhang writeCode]; [xiaoZhang debugCode]; [xiaoZhang report]; } return 0;}//——————————//// Coder.h// IOS150624_ObjectiveC_协议语句//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>//自定义一个协议,协议名和类名可以相同@protocol Coder <NSObject>- (void)writeCode;- (void)debugCode;- (void)report;@end@interface Coder : NSObject@property (copy,nonatomic)NSString *name;@end//———————————————//// Coder.m// IOS150624_ObjectiveC_协议语句//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import "Coder.h"@implementation Coder@end//———————————————//// Programmer.h// IOS150624_ObjectiveC_协议语句//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>#import "Coder.h" //遵守协议必须包含协议所在的头文件@interface Programmer : Coder <Coder>@end//—————————————————//// Programmer.m// IOS150624_ObjectiveC_协议语句//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import "Programmer.h"@implementation Programmer- (void)writeCode{ NSLog(@"轻轻松松敲键盘,快快乐乐写代码");}- (void)debugCode{ NSLog(@"辛辛苦苦调代码");}- (void)report{ NSLog(@"工作完成可以报告上线了");}@end协议例子2://// main.m// IOS150624_ObjectiveC_协议关键字3//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>#import "Student.h"int main(int argc, const char * argv[]) { @autoreleasepool { Student *std = [[Student alloc] init]; [std wirteCode]; [std debugCode]; [std report]; } return 0;}//———————————————//// Programmer.h// IOS150624_ObjectiveC_协议关键字3//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>@protocol Programmer <NSObject>@required //(缺省),默认,必须实现的方法,不实现会有警告,其他没有影响- (void)wirteCode;- (void)debugCode;- (void)report;@optional //可选,在遵守该协议的类中可以选择实现或者不实现该方法,不会有警告.但是如果要调用这个方法则必须实现- (void)eat;- (void)drink;@end//———————————————//// Student.h// IOS150624_ObjectiveC_协议关键字3//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>#import "Programmer.h"//遵守多个协议时,将多个协议写在<>中,使用","分割开@interface Student : NSObject <Programmer>@end//——————————————//// Student.m// IOS150624_ObjectiveC_协议关键字3//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import "Student.h"@implementation Student- (void)wirteCode{ NSLog(@"写代码");}- (void)debugCode{ NSLog(@"调试代码");}- (void)report{ NSLog(@"写报告");}@end协议例子3:自定义类型的归档//// main.m// IOS150624_ObjectiveC_协议语句2//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>#import "Dog.h"//*******************//* 使用系统协议 *//*******************int main(int argc, const char * argv[]) { @autoreleasepool { //将自定义类型归档,需要遵守NSCoding协议,实现其中的两个方法.(只归档成员变量,不归档类中的方法) Dog *xiaoBai = [[Dog alloc] init]; xiaoBai.name = @"小白"; xiaoBai.age = 12; BOOL ret = [NSKeyedArchiver archiveRootObject:xiaoBai toFile:@"/Users/qianfeng/Public/ExerciseProject/IOS150624_ObjectiveC_协议语句2/IOS150624_ObjectiveC_协议语句2/dog.txt"]; if (ret) { NSLog(@"归档成功"); } else { NSLog(@"归档失败"); } //反归档 Dog *dog = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/qianfeng/Public/ExerciseProject/IOS150624_ObjectiveC_协议语句2/IOS150624_ObjectiveC_协议语句2/dog.txt"]; if (dog) { NSLog(@"dog = %@",dog); } else { NSLog(@"解码失败"); } } return 0;}//—————————————//// Dog.h// IOS150624_ObjectiveC_协议语句2//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>@interface Dog : NSObject <NSCoding>@property (copy,nonatomic)NSString *name;@property (assign,nonatomic)NSInteger age;@end//———————————————//// Dog.m// IOS150624_ObjectiveC_协议语句2//// Created by PengJunlong on 15/6/24.// Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import "Dog.h"@implementation Dog- (void)encodeWithCoder:(NSCoder *)aCoder{ //如果父类也遵守对应的协议,那么应该先调用父类的方法进行编码,层层递归编码 //[super encodeWithCoder:aCoder]; [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeInteger:self.age forKey:@"age"];}- (id)initWithCoder:(NSCoder *)aDecoder{ //如果父类也遵守对应的协议,先调用父类的方法解码 //self = [super initWithCoder:aDecoder]; self.name = [aDecoder decodeObjectForKey:@"name"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; return self;}- (NSString *)description{ return [NSString stringWithFormat:@"name = %@,age = %ld",_name,_age];}@end
0 0
- 20150624_OC之协议与自定义类型的归档
- 自定义类型归档与反归档
- 20150623_OC之文件归档NSKeyedArchiver
- 20150624_OC之@class关键字
- 20150624_OC之代理及反向代理的简单例子
- OC之自定义归档
- 20150619_OC之copy与mutableCopy
- 20150623_OC之时间NSDate与NSDateFormatter
- 黑马程序员_OC协议
- 20150610_OC之NSString及与C中字符串的区别
- 黑马程序员_OC语言的块和协议
- IOS巅峰之归档与反归档
- 自定义对象的归档 //类只有实现 NSCoding 协议才具备归档功能 归档最好定义成宏,笔误好发现.
- 归档/解归档已经实现NSCoding协议以使自定义类具有归档功能
- 【Objective-C】OC中自定义对象的归档基本概念和使用方法(实现NSCoding协议)
- 黑马程序猿_OC之block与protocol
- 20150619_OC之ARC与MRC混合编程
- 数据存储之归档-NSCoding协议
- 万能makefile
- web2.0之JSP
- .NET开发邮件发送功能的全面教程(含邮件组件源码)
- Android逆向分析之dex2jar异常处理
- C++读书笔记:构造函数与析构函数(来自谭浩强的C++程序设计)
- 20150624_OC之协议与自定义类型的归档
- IQ存储过程中执行有结果集返回的动态SQL的调用方法
- 关于网站重定向
- android ndk学习
- 中国剩余定理
- strcat 函数
- 20150624_OC之@class关键字
- 黑马程序员--JAVA基础知识--IO流
- MFC窗体去边框、置顶、全屏、激活