iOS学习笔记---oc语言第七天
类的扩展
NSDate是Cocoa中用于处理日期和时间的基础类,封装了某一给定的时刻,具体的日期 时间和时区
使用+date方法获取当前日期和时间
NSDate *date = [NSDate date];//获取当前时间
NSLog(@"%@",date);//无论你是哪个时区的时间,打印的总是o时区的时间
NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:**];//从现在开始之后的时间
NSLog(@"%@",date2);
NSTimeInterval date3 = [date timeIntervalSince1970];//获取时间间隔 从1970年到现在的时间间隔
NSLog(@"%f",date3);
NSTimeInterval
即double类型,用以表示以秒为单位的时间间隔
可以使⽤用-initWithTimeIntervalSinceNow:⽅法传入一个NSTimeInterval参数,创建⼀个 NSDate对象
例如:NSDate * tomorrowDate = [[NSDate alloc] initWithTimeIntervalSinceNow:24*60 * 60];
NSDate * yesterdayDate = [[NSDate alloc] initWithTimeIntervalSinceNow:-1 * 24*60 *60];
取两个时间对象的间隔:NSTimeinterval = [tomorrowDate timeIntervalSinceDate:yesterdayDate];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
//YYYY代表4位的年
//MM代表两位的月
//dd代表两位的日
//HH代表24进制小时
//mm代表两位的分钟
//ss代表两位的秒
//NSDateFormatter功能是NSString 与 NSDate 互转
//1.NSDate转换为NSString
NSString *datestr = [format stringFromDate:date];
NSLog(@"%@",datestr); NSDate *newdate = [format dateFromString:@"2014-07-02 11:54:03"];
NSLog(@"%@",newdate);
Category
Category也叫分类或类⺫
主要作用是为 没有源代码 的类添加方法。
通过Category添加的⽅法会成为原类的一部分。从⽽而达到扩展一 个类的功能。
一般扩展系统或者第三方类库
定义Category
新建⽂件
选择Objective-C Category模板
填写类名和分类名
.h⽂件添加⽅法声明
.m添加方法实现
需要使⽤的地方进⾏行调用
Category的声明
NSString+SayHi.h⽂件
@interface NSString (SayHi)
- (void)hi;
@end
Category的实现
NSString+SayHi.m文件
#import “NSString+SayHi.h”
@implementation NSString(SayHi)
- (void)hi{
NSLog(@”这是通过category为NSString添加的hi方法”);
}
@end
Category与子类的区别
练习:
使⽤用Category为NSDate类添加⼀个类⽅方法
(dateWithDateString:),实现将下述字符串转换为NSDate对象。 将@“20140402142850”转换为NSDate。
NSLog(@"%@",[NSDate dateWithString:@"20140402142850"]);
NSDate+DateWithString.h中代码
#import <Foundation/Foundation.h> @interface NSDate (DateWithString)
+ (NSDate *)dateWithString:(NSString *)str;
@end
NSDate+DateWithString.m中代码
#import "NSDate+DateWithString.h" @implementation NSDate (DateWithString)
+ (NSDate *)dateWithString:(NSString *)str
{
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"YYYYMMddHHmmss"];
NSDate *date = [format dateFromString:str];
return date;
}
@end
main.m中代码
NSLog(@"%@",[NSDate dateWithString:@""]);
Extension
主要作用是为类添加"私有"方法
在.h中没有声明,在.m中有实现
有时候方法比较复杂的时候,使用私有方法结合组成一个复杂方法,,外部实现只用声明复杂方法,不用理会私有方法的实现
#import "Person.h"
@interface Person()//这样就写成Extension,不写也可以,写出来只是为了管理,给程序看的,让其他开发者一眼能看出来那些是"私有"方法
{
NsInteger _age;//定义一个私有变量
} - (void)eat; @end
@implementation Person
- (instancetype)initWithName:(NSString *)name sex:(NSString *)sex
{
self = [super init];
if (self) {
_name = name;
_sex = sex;
}
[self eat];
return self;
}
- (void)eat//只有实现,没有声明 .m文件中其他方法可以调用
{
NSLog(@"这是一个私有方法,只有自己的.m文件中使用eat");
}
@end
Protocol 协议
协议是一套标准(一堆方法的声明),只有.h文件
接受协议的对象实现协议中定义的方法
#import <Foundation/Foundation.h> @protocol MyProtocol <NSObject>//< >中定义的的这个协议也遵守了NSObject协议
@required//默认是必须实现的 可以省略,省略代表必须实现
- (void)method1;
- (void)method2;
@optional//可选择是否实现
- (void)method3;
@end
遵循协议
#import “MarryProtocol”
@interface Boy : NSObject <MarryProtocl> ...
@end
@implementation Boy
//协议中⽅法的实现
@end
一个结婚的协议例子
//协议MarryProtocol.h中文件
#import <Foundation/Foundation.h> @protocol MarryProtocol <NSObject> - (void)washcloth; - (void)cook; - (void)dohousework; - (void)makeMoney; @optional
- (void)hitDouDou; @end
//Girl.h中代码
#import <Foundation/Foundation.h>
#import "MarryProtocol.h" @interface Girl : NSObject
{
NSInteger _age;//年龄
id <MarryProtocol> _husband; }
- (instancetype)initWithAge:(NSInteger)age;
//设置年龄
- (void)setAge:(NSInteger)age;
//获得年龄
- (NSInteger)age; - (void)work; - (void)setHusband:(id<MarryProtocol>)husband; - (void)hungry;
- (void)dirty;
@end
//Girl.m中代码
#import "Girl.h" @implementation Girl
- (instancetype)initWithAge:(NSInteger)age
{
self = [super init];
if (self) {
_age = age;
}
return self;
}
- (void)hungry
{
[_husband cook];
}
- (void)setAge:(NSInteger)age
{
_age = age;
} - (NSInteger)age
{
return _age;
} - (void)work
{
NSLog(@"接拍电影,广告,电视剧");
} - (void)setHusband:(id<MarryProtocol>)husband
{
_husband = husband;
}
- (void)dirty
{
[_husband washcloth];
}
@end
//Boy.h中代码
#import <Foundation/Foundation.h>
#import "MarryProtocol.h"
@interface Boy : NSObject <MarryProtocol>
- (void)work;
@end
//Boy.m中代码
#import "Boy.h" @implementation Boy
- (void)work
{
NSLog(@"我是一个牛逼替身");
} - (void)washcloth
{
NSLog(@"洗衣服");
} - (void)cook
{
NSLog(@"做饭");
} - (void)dohousework
{
NSLog(@"做家务");
} - (void)makeMoney
{
NSLog(@"赚钱");
}
- (void)hitDouDou
{
NSLog(@"打豆豆");
}
@end
//main.m中代码
#import <Foundation/Foundation.h> #import "Girl.h"
#import "Boy.h" int main(int argc, const char * argv[])
{ Girl *liuyifei = [[Girl alloc] initWithAge:];
[liuyifei work];
//数年之后
Boy *wangwu = [[Boy alloc] init];
[wangwu work]; //慢慢熟悉
//...
//走到一起
//丈母娘
//不同意 [liuyifei setHusband:wangwu];
[liuyifei hungry];
[liuyifei dirty]; //n年之后,wangwu富有了
[liuyifei setHusband:nil]; return ;
}
iOS学习笔记---oc语言第七天的更多相关文章
- iOS学习笔记---oc语言第一天
第一讲 初始类和对象 c语言的超集,允许在oc中使用c语言源代码.编译器兼容c语言程序 具备完善的面向对象特性 包含一个运行时系统 类库丰富 面向对象编程 oop 面向对象语言:c++ java ...
- iOS学习笔记---oc语言第五天
字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key- ...
- iOS学习笔记---oc语言第四天
字符串 数组 一.使用苹果帮助文档 学会使⽤用苹果帮助⽂文档是开发者的⼀一项技能 Inherits from 继承⾃自 Conforms to 遵循什么协议 Framework 属于哪个框架 Avai ...
- iOS学习笔记---oc语言第三天
继承.初始化方法 一.继承 继承的上层:父类 继承的下层:子类 继承是单向的,不能相互继承 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为 子类能继承父类全部的特征和行为(私有变量 ...
- iOS学习笔记---oc语言第九天
初级内存管理 iOS应用程序出现crash(闪退),90%以上是内存问题////其他:数组越界,方法只声明没实现 内存问题体现在两个方面:内存溢出\野指针异常 内存溢出:程序运行超出内存上限 野指针异 ...
- iOS学习笔记---oc语言第六天
Block .数组高级 block本质上就是匿名函数(没有名称的函数) block语法和函数指针很相似 回顾函数 函数:C语⾔中,实现某一类功能的代码段. 完整的函数包含两部分:函数声明.函数定义 函 ...
- iOS学习笔记---oc语言第二天
实例变量与方法 一.实例变量的可见度 二.方法 oc中的方法分两种:类方法和实例方法 类方法:只能类使用 eg:+ (id)alloc 注:类方法中不能使用实例变量 实例方法:只能对象使用,eg:- ...
- iOS学习笔记---oc语言第十天
内存管理高级 一 属性的内部实现原理 assign retain copy assign 下的属性内部实现 setter方法 @property(nonatomic,assign)NSS ...
- iOS学习笔记---oc语言第八天
属性 能在一定程度上简化代码,并且增强实例变量的访问安全性 属性的声明:使用@property声明属性 eg:@property NSSstring *name;相当于@interface中声明了两 ...
随机推荐
- CF 241E flights 最短路,重复迭代直到稳定 难度:3
http://codeforces.com/problemset/problem/241/E 首先检测哪些点会出现在从起点到终点的路上,可以用dfs或者迭代, 然后,对于所有的边,设f为边起点,t为边 ...
- Pogo-Cow
题目大意: 给出直线上N个点的坐标和分数,任意选一个点出发,每次只能跳到另外一个点上并获得相应的分数,且每次跳的方向要相同,本次跳的距离不小于上次跳的距离. 求最大得分. N<=1000. ...
- GITHUB的初次使用
对于一个从未用过 接触过github的人来说,达到一个最终的成功真可谓是历经千辛万苦.在这里真的感谢我们的小组组长,我遇到的问题除了自己的查到的,剩 下的基本上都是组长帮我解决的.当所有 ...
- ios 常用的小框架
在ios开发中,一些请求 kvc 下拉列表 图片请求等等自己手写代码的话非常麻烦,还容易出现一系列的问题,现在整理了一些常用的一些小框架. 其中MJExtension 和 MJRefresh 这两个 ...
- java抽象类与接口 详解
在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题 ...
- Unity游戏数据用Json保存
(一)关于路径 unity有几个关键的路径 (1).Application.dataPath 只读路径,就是工作目录的Assets路径 (2).Application.streamingAssetsP ...
- JS 验证一组input框是否为空的方法
function checkInput() { var $tr = $("#tb_confirmed .scrollContent").find("tr"); ...
- iOS上架(转)
自己的经验总结,有错的话请留言,第一时间更改. 先大概说一下IOSAPP上架的几个步骤(详细步骤见下图): 创建证书请求文件 登录苹果开发者中心生成发布者证书(下载下来要双击一下) 设置APPID(要 ...
- Android 对 properties文件的读写操作
-. 放在res中的properties文件的读取,例如对放在assets目录中的setting.properties的读取:PS:之所以这里只是有读取操作,而没有写的操作,是因为我发现不能对res下 ...
- (转)浅析Mysql的my.ini文件
原文:http://blog.csdn.net/heirenheiren/article/details/7895139 转载:http://hunanpengdake.iteye.com/admin ...