五伯抢救时的体症,登陆注册流程

自我介绍一下,gege现在是大三,想成为一名PM。

TZ : 假如孤独的时候会,我们应该庆幸至少自己还是在这个地球上,没有被遗落在黑暗的宇宙里

今天随手拍的花

前边有在58赶场集团的「转转」实习过,依旧属于小白,近年来在锻炼一些PM的基本技能。

一 : 科普一分钟

runtime我们总能听到,或者在框架中看看,不过在支付项目标时候,似乎没有用到过,读代码的时候也是匆匆略过,可是它的功利实在过多,能帮衬我们缓解部分早已绞尽脑汁,但却无功而返的题目,和部分门类需求上的扑朔迷离问题,下边一一介绍在实战中的开发技巧.

公公叔是老爹最知心的兄弟。 从意识癌症到扩散到淋巴,一个月。
礼拜一深夜病情起先恶化,明日深夜7点多,走了。

友善在就学的过程中的所思所得想找个地点记录,由此开班码字,争取之后周周都写几篇随笔,例如产品分析等等。

二 : 项目开发中的实战运用

父辈抢救时的体症

PM工作中最最基础的应有就是流程图以及原型图的面世了,而许多职能的流水线中,登录与登记的应当算是最简便的了,下面就是gege做的流程图:

1. 简介

RunTime简称运行时,OC就是运行时机制,也就是在运作时候的一部分建制,其中最关键的就是信息机制.

相对于C语言函数的调用,在编译的时候会操纵调用哪个函数,而对此OC的函数,属于动态调用过程,在编译的时候并不可以决定真正调用哪个函数,唯有在真的运行的时候才会依照函数的名目找到呼应的函数来调用.

事实阐明,在编译阶段:OC可以调用任何函数,即便那几个函数并未实现,只要表明就不会报错.

而对于C语言,在编译阶段,调用未实现的函数就会报错.

自身和这一个岳父不是很精通。即便同城,但他深居简出,唯有二伯脑梗后,他来看望,偶尔我在家时,会磕磕碰碰。

登陆注册流程

2.消息发送

其他方法调用本质:发送一个信息,用runtime出殡信息,OC底层实现通过runtime实现

以身作则代码:一个对象倘使创造,开辟空间的

     //xcode6苹果不推荐使用runtime

    //找到build setting -> 搜索msg NO

    //id:谁发送消息
    //SEL : 发送什么消息

 //    id objc = [NSObject alloc];
    id objc = objc_msgSend([NSObject class], @selector(alloc));

    //    objc = [objc init];

    objc = objc_msgSend(objc, @selector(init));

最终生成音信机制,编译器做的事务,最终代码,需要把当下代码重新编译,用xcode编译器
,最终生成代码-转换成c++代码

她是一个孤单的男儿,高瘦,一生未娶。我很刻钟记得他和一个有名小说家的幼女谈过恋爱,没成。

里面包括忘记密码、社交账号登录、短信验证码登录等一些功力。

3.目的发送音讯

第一创立一个对象,里面有多少个大家落实的不二法门

@interface TZperson : NSObject

-(void)eat;

-(void)TZeat:(NSString*)food;

贯彻信息发送

 TZperson *p = objc_msgSend(objc_getClass("TZperson"),sel_registerName("alloc"));


    //    p = [p init];
    p = objc_msgSend(p, sel_registerName("init"));


    //调用
    //    [p TZeat:@"一块巧克力"];
    objc_msgSend(p, @selector(TZeat:),@"一块巧克力");

注意 objc_getClass("TZperson)"[TZperson Class] 同意

过程分析 : 如何调用 TZeat:方法的
1.因而isa去相应的类中追寻,
2.注册形式编号(把措施名转换成方法编号)
3.基于办法编号去搜寻对应的艺术
4.找到的只是最终函数实现的地点,依照地方去方法区调用对应的函数

图解分析 :

图解1

阿爸脑梗五年多,坐轮椅。姑丈病发后,三伯向来郁郁寡欢。我期待他释怀些,但他或许想得比较多,始终沉闷。

接下去gege用Axure绘制了登录及注册流程中的的原型图,下边是中间的两张:

4.Runtime互换方法 : 只想修改系统的法子实现

情景 : 当有一品种的一个系统方法 我们以 [UIImage imageNamed:@"1.jpeg"];
为例,为这么些办法添加一个功能,判断图片是否读取成功,假诺这一个项目有200个地点使用了系统的这么些主意,我们有怎么着好的格局,来化解上述要求吗?

有人会想到自定义方法.那么些法子倒是可以,可是如此做未免工作量太大了.所以我们想到用runtime换成方法来贯彻上述要求

代码示例 :

外表 : 我们要给下边那个 系统方法添加效果

    UIImage *image = [UIImage imageNamed:@"1.jpeg"];

个中 : 所以要写一个分拣,来成功章程交换

@interface UIImage (image)
+(UIImage*)TZ_imageNamed:(NSString *)name;

@end

//把类加载进内存的时候调用,只会调用一次
+(void)load{



//交换方法 runtime 交换方法
    //获取imageNamed
    //获取哪个方法
    //SEL:获取哪个方法
    Method imageNamedMethod = class_getClassMethod(self, @selector(imageNamed:));


    //获取TZ_imageNamed
    Method TZimageNamedMethod = class_getClassMethod(self, @selector(TZ_imageNamed:));

   //交换方法: runtime
    method_exchangeImplementations(imageNamedMethod, TZimageNamedMethod);

    //调用imageNamed

}

+(UIImage*)TZ_imageNamed:(NSString *)name{

 UIImage *image = [UIImage TZ_imageNamed:name];
    if (image) {
        NSLog(@"加载成功");
    }else{
        NSLog(@"加载失败");
    }
    return image;
}

规律 : 与对象发送音信相似,只不过在针对方法区的时候
互换了六个函数的主意实现.

星期二,伯伯久坐在三叔病床前,一贯握着他的手。大叔基本已经没有发现、不可以开口。癌症扩散到淋巴后,喉咙无法吞咽,靠输液维持。

报到及注册原型图

5. Runtime添加主意

急需分析 : 某个对象没有兑现某个方法,不过我们却想用如何落实

外部 :

-(void)TZaddMethod{



    TZperson *person = [[TZperson alloc]init];

    //执行为实现方法    
    [person performSelector:@selector(TZplay:) withObject:@"人鱼表演"];



}

内部

//任何方法默认都有两个隐式参数,self,_cmd
//什么时候调用:只要一个对象调用了一个未实现的方法就会调用这个方法,进行处理
//作用 : 动态添加方法,处理未实现
+(BOOL)resolveInstanceMethod:(SEL)sel{



    if (sel == NSSelectorFromString(@"TZplay:")) {

        //TZdrink
        //Class : 给哪个类添加方法
        //SEL : 添加哪个方法
        //IMP : 方法实现 ==>函数 ==>函数入口==>函数名
        //type : 方法类型
        class_addMethod(self, sel, (IMP)tzaaa, "v@:@");
        return YES;

    }

        return [super resolveInstanceMethod:sel];


}

void tzaaa(id self,SEL _cmd,NSString *play){
    NSLog(@"观赏了%@",play);

}

合法文档 :

法定文档

二叔临终前用的药

事先在58实习时曾用Axure画过运动的banner,这一次仍然第一次来绘制界面。

6.Run提姆(Tim)e动态添加属性

急需分析 : 当我们想给系统扩张一个性质的时候,我们首先做的 是
建立项目,可是项目中的 属性 是尚未setget
怎么着兑现呢.用runtime来贯彻看看.

演示代码 :

// @property分类:只会生成get ,set方法生明,不会生成实现,也不会生成下划线成员属性
@property NSString *name;

-(void)setName:(NSString *)name{

//    _name = name;


    // object:给哪个对象添加属性
    //key : 属性名称
    //value : 属性值
    //policy : 保存策略
    objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);



}


-(NSString *)name{

//    return _name;

    return objc_getAssociatedObject(self, @"name");

}

规律分析 :
动态添加属性,就是让某个属性与目的暴发关联,一般都是本着系统的类

明日一早,电话响起时,我就预感到什么。

在起首做事先呢,觉得登录的流程图以及原型图都很简单,但在实际操作中就会时常在有些题目上动脑筋。比如说,遗忘密码放在左侧依旧右手、注册的流水线是不是在一个界面完成,以及在流水线中自己加的一个小需求:密码错误5次后自行跳转到忘记密码页,并且自动填写用户在签到时填写的手机号或邮箱地址。

7.runtime字典转模型

要求分析 : 自动遵照模型来分析字典,对模型和子模型举办赋值

外部

 TZStatesItem *item = [TZStatesItem modelWithDic:dict];

内部

@interface NSObject (Model)
//字典转模型
+(instancetype)modelWithDic:(NSDictionary*)dic;


@end

//本质:创建谁的对象
+(instancetype)modelWithDic:(NSDictionary*)dic{

    id objc = [[self alloc]init];

    //Ivar:成员变量  以下划线开头
    //property:属性

    //runtime : 根据模型属性,去字典中取出对应的value给模型属性赋值
    //1.获取模型中所有成员变量 key
    // 获取哪个类的成员变量
    //count : 成员变量个数

  unsigned  int count = 0;
    //获取成员变量数组
   Ivar *ivarList = class_copyIvarList(self, &count);

    //遍历所有成员变量名字
    for (int i = 0; i < count; i++) {
        //获取成员变量
        Ivar ivar = ivarList[i];
        //获取成员变量名字
        NSString *ivarName = [NSString stringWithUTF8String:ivar_getName(ivar)];


        NSString *ivarType = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];
        //            @\"user\" -> user

        ivarType = [ivarType stringByReplacingOccurrencesOfString:@"\"" withString:@""];
        ivarType = [ivarType stringByReplacingOccurrencesOfString:@"@" withString:@""];

        //获取key
        NSString *key = [ivarName substringFromIndex:1];

        //去字典中查找对应的value
        id value = dic[key];


        //二级转换 : 判断下value 是否是字典,如果是,字典转换成对应的模型,并且是自定义对象才转换
        if ([value isKindOfClass:[NSDictionary class]] && ![ivarType hasPrefix:@"NS"]) {


        //获取类
            Class modelClass = NSClassFromString(ivarType);
            value = [modelClass modelWithDic:value];


        }

        //给模型中属性赋值
        if (value) {
            [objc setValue:value forKey:key];

        }

    }

    //2.根据属性名去字典中查找value
    //3.给模型中属性赋值 KVC
    return objc;

}

延展 :
上述获取属性列表和成员列表功效也足以用来,归档和反归档的急需中,减弱了大量冗余代码.

7点多,大叔走了。8点多我带父母来到医院。大爷坐在轮椅上,来到大叔近前,拿起他的手,自言自语道:手如故热的……

先是篇作品,一个新起来,出品前辈若路过,恳请指导一二

三 : 总结

完全来说,runtime在我们的实在开支中应用的不多,尽量不要为了利用而采纳,在采纳中,解决部分犯难和难处理的题目.活学活用.

人在这样的氛围下,泪水会直接流出来。五叔悲从中来,发出哭声。我对姑丈说:“二叔,他走了,挺安详的。我们安然地送送他,别惊扰他。”公公就忍住,没有放声。三伯脑梗多年,很不容易地维持着发现和省略的活动,有时像孩子般地依赖着孙女,很听话。

把父母安排到病房外,我一个人走进来,告别不太熟稔的伯伯。

我不是天生就足以相比冷清地面对死亡的。

五年前,大伯跌倒后脑梗,后来三姑的过敏性乳房神经纤维瘤同步发生。我开端密集地和医院暴发交集。三伯是摔断股骨后脑梗,产科和神经科都不接。血液科认为出手术麻醉的话会加重脑梗,有生命危险;神经科认为骨头先到眼科接上才能入神经科。就这么,小叔拖着断骨在诊所等了10天!我打交道于东京(Tokyo)各大医院,耳鼻喉科出名的,神经科有名的,麻醉师著名的。最后,终于有一个卫生院的内科,敢接高龄脑梗病人的眼科手术。我跑到医务人员这里,请他带自己到病房,亲眼看到他正好动过耳鼻喉科手术的一个94岁的脑梗老人,然后决定,就到这边做。

前前后后换病房,耳鼻喉科是各个肢体的伤残,神经科是各个精神的拖欠。当然,神经科的另一个特性是,大小便不受控。我曾目睹一个幼子怒斥他非凡的阿爸,因为她二叔又拉在床上。我也亲眼目睹女护工毫不遮掩地掀起男病患的被子,让她在床上解手。还有,摔断腰骨的民工和他从老家赶来的常青媳妇。民工生死未卜,年轻媳妇已经起来和男护工眉来眼去。妇科的儿女护工都是相比结实的。

在医院里,当一个性命离开,会生出很不堪设想的气象。家人悲伤;护工急着挪人,大声提出各类加钱的事;医务卫生人员过来问何人是做主的,因为要登时决定是用他们提供的一行服务,依然自办丧事;后驶来的家人一现身就放声大哭;而此外病人和亲属仍然routine地重新着家常,该听收音机听收音机,该刷手机刷手机……
见了太多这样的景色,漠然和麻木会有呢?可能会有。

罗安达告诉自己,京族男人18岁要看天葬。看过天葬,才真的领会怎么是活着。他小姑也是天葬,他目击了那所有。

四叔脑梗后,一度丧失希望。五年间,他经历了十多少个亲人、朋友的离去。最玄而又玄的,是对门的老翁。老头硬朗,声如洪钟,每一天磨练,时不常鼓励岳父几句。有一天他浇花,手里扎了一根刺,没在意,两周后,刺里的毒进入血液,不治,走了。到现行我们都有恍若隔世的感觉到,不能够相信,那么一个乐天健康的老一辈,就这样没有了。

阿爸渐渐接受了命局的部署,心绪终于稳定下来。

大姨开刀这次,我把老爹从另一个医务所接受阿姨的诊所看她。一个在床上,一个在轮椅上,我笑着说,现在轮到我当家长了,你们虽然放心,我管你们:)三个老人相视着,我不亮堂她们相互之间有多相爱,但那一刻,他们应有肯定,这是天机。

五年间,我被迫反复考虑关于死亡的问题。希望有一天面对时,可以坦然接受。

后来我发觉,这既是一个军事学命题,也是一种思维磨炼。

在例行能干事的时候,别浪费生命;

在精晓地领悟爱对方时,清楚地报告对方,不要犹豫、闪躲;

恬静而有尊严地走,意味着要提前做好准备,包括走了后来换什么衣裳这么的细节;

心灵不慌乱,意味着通晓哪些是轮转,什么是极限不变。

直面死亡,是亟需预备的,而且越早越好。它并不消极,相反,它引起你心中许多沉睡的醒悟。

这整个是会完结的,我们唯一可能留下的痕迹,是爱和创立。

这整个是会远去的,大家恐怕再遭受,这时,大家是自然界间永远不灭能量的重逢,记念可能不可能被唤起,我们换了一个时空,继续去接近上帝赋予大家的、最权威的形式。死亡是今生的永诀,但大家其实永不分离。

就此,当公公面对四伯悲恸欲绝时,我轻度对爹爹说了一句,二叔就安静下来。悲恸尽头,是可望。这种觉悟在各样人心中,只是需要被指示。

前天迪拜太阳很好

幼女夜间回到,我默默坐在她对面。她问:how is uncle? 我说了境况。

幼女停了瞬间,说:你别要求自己很不适,我和uncle不熟。

自己说:三姑知道。你去拥抱下伯公,这样她会来到温暖。

女儿说:好的。

幼女后来又问我:可以转移个话题吧?

本人说本来。

他说,依据我先天的大成,进常青藤大学是不曾问题的。我想学音乐和liberal
arts,但人家说这是找不到好工作的,我应该学营销、管理什么的。

自家说,找工作不是最重要的,最要紧的是您遵照自己喜爱的措施活过,最要害的是你在生命中触碰到了最遥远的可能,最重点的是你保存了祥和最珍奇的个性和天真。

自己几乎不加思索地显露这么些。

幼女说,我最感谢您的,就是你对自我的“遗弃自流”。

谢谢死亡。我清楚的道理是,在死去来临此前,大家得以给到祥和最好的礼品,是不废弃成为一个与心灵和解的人,一个得以把外化激情转为深深祝福的人,一个通晓并注重生命内生规律的人。

幼女懂事地苏醒拥抱我,说:大姨晚安!

晚安

相关文章