文档章节

【非凡程序员】 OC第十四节课 (代理模式 二 闹铃响了)

七月流火zsp
 七月流火zsp
发布于 2015/06/04 21:58
字数 337
阅读 115
收藏 1

这是一个人定闹钟的例子,就是人委托闹钟叫醒自己

main函数:

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Clock.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool  {
        // insert code here...
        NSLog(@"Hello, World!");
       
        Person *person1=[[Person alloc]init];
        person1.name=@"岁平";
       
        Clock *clock=[[Clock alloc]init];
        clock.person =person1;
   
        person1.delegate=clock;

        person1.persondate=@"201506041716";
        
        [person1 setup];
       
        [[NSRunLoop currentRunLoop]run];

       
    }
    return 0;
}

Person.h文件

#import <Foundation/Foundation.h>
#import "ClockProtocol.h"

@interface  Person : NSObject

@property (nonatomic,assign) NSString *name;
@property (nonatomic,assign) id <ClockProtocol> delegate;
@property (nonatomic,assign) int count;
@property (nonatomic,assign) int suijishu;
@property (nonatomic,assign) NSString *persondate;
-(void) setup;
-(void) getup:(int) ringTimes;

@end

Person.m文件:

#import "Person.h"

@implementation Person

-(id)init
{
    self =[super init];
    if (self)
    {
        _suijishu=arc4random() %10;
    }
    return self;
}

-(void) setup
{
    NSLog(@"%@设置---⏰",_name);
 
    [_delegate ring];
}


-(void) getup:(int) ringTimes

{
    if (_suijishu==ringTimes)
    {
        NSLog(@"我要起来了");
        //[_delegate stop];
    }
    else
    {
        NSLog(@"getup.....");
    }

}

@end

Clock.h文件:

#import <Foundation/Foundation.h>
#import "ClockProtocol.h"
@class  Person;

@interface Clock : NSObject<ClockProtocol>
@property (nonatomic,assign) int count;
@property (nonatomic,assign) NSTimer *timer;
@property (nonatomic,weak) Person *person;
-(void) ring;

@end

Clock.m文件:

#import "Clock.h"
#import "Person.h"

@implementation Clock

-(id) init
{
    self = [super init];
 
    if (self!=nil)
    {
        _timer=[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(ring) userInfo:nil repeats:YES];
    }
    return self;
}


-(void) ring

{
    NSDate *date=[NSDate date];
    NSDateFormatter *f=[NSDateFormatter new];
    [f setDateFormat:@"yyyyMMddHHmm"];
    NSString *datetime=[f stringFromDate:date];
 
    if ([datetime isEqualToString: _person.persondate])
    {
        _count++;
       
        [_person getup:_count];
  
        [self sing];
       
    }
    else
    {
        NSLog(@"%@,datetime);
    }
   
 
}

-(void) sing
{
    NSLog(@"ding----ding---ding   快起床啊啊啊-------");
}

- (void) stop
{
    [_timer invalidate];
}

@end

ClockProtocol.h文件(协议)

#import <Foundation/Foundation.h>

@protocol ClockProtocol <NSObject>

@optional
-(void) ring;

@required
-(void) stop;

@end

© 著作权归作者所有

共有 人打赏支持
七月流火zsp
粉丝 8
博文 29
码字总数 11273
作品 0
西安
【非凡程序员】 OC第十五节课 (观察者模式和KVO进行对比)

今天主要学了观察者模式,以及回顾复习了KVO,两者进行对比 什么是观察者模式? 我们先打个比方,这就像你订报纸。比如你想知道美国最近放生了些新闻,你可能会订阅一份美国周刊,然后一旦美...

七月流火zsp
2015/06/05
0
0
设计模式(Swift) - 3.观察者模式、建造者模式

上一篇 设计模式(Swift) - 2.单例模式、备忘录模式和策略模式中讲了三种常见的设计模式. 单例模式: 限制了类的实例化,一个类只能实例化一个对象,所有对单例对象的引用都是指向了同一个对象....

Dariel
07/01
0
0
【非凡程序员】 OC第十四节课 (代理模式 一 医生与病人)

1.代理模式 举个例子:有一个婴儿,他本身不会自己吃饭和洗澡等等一些事情,于是婴儿就请了一个保姆,于是婴儿和保姆之间商定了一个协议,协议中写明了保姆需要做什么事情,而保姆就是这个代...

七月流火zsp
2015/06/03
0
0
教程1:Objective-C

Objective-C的教程已经看过了。 内容大概有:[Objective-C基础语法(if/else/switch/for...),关键字,运算符],[面向对象(封装/继承/多态)],[Foundation框架常用类],[内存管理],[协...

殷美洪
2013/03/11
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之高级类型的字符串字面量类型

转发TypeScript基础入门之高级类型的字符串字面量类型 高级类型 字符串字面量类型 字符串字面量类型允许你指定字符串必须的固定值。 在实际应用中,字符串字面量类型可以与联合类型,类型保护...

durban
20分钟前
2
0
iOS权限授权添加

<!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问相册</string> <!-- 相册写入 --> <key>NSPhotoLibraryAddUsageDescription</key> <string>App......

RainOrz
24分钟前
1
0
支配树(Dominator Tree)

MAT中的支配树 在使用MAT分析项目的内存泄漏问题时,其中有一个支配树(Dominator)视图。如果我们把Java对象之间的引用关系看做一张有向图(可以存在环)的话,对象的支配树体现了对象之间的...

akane_oimo
26分钟前
1
0
xshell官网下载及安装(免费版本)

百度搜索xshell,点击xshell官网下载链接,如图 然后点击下图的按钮 点击Latest Products,可以下载最新版本,选择要下载的版本,点击下载 选择上面红框里面的,并填写内容,submit之后会有邮...

曾大大胖
31分钟前
2
0
Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博

兼容SDK 18以上的系统,直接调用系统分享功能,分享文本、图片、文件到第三方APP,如:微信、QQ、微博等 因为偷懒,可直达微信、朋友圈、QQ、QQ空间、微博的分享仅写了图片分享的,其他的文本...

她叫我小渝
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部