标签:
相信有不少初学者,oc中的对象作为方法连续传递在一两个对象的时候可能还好,多了可能就绕晕了...我接下来就分享一下我个人对这一块的知识的总结或心得或诀窍吧.
我觉得用"螳螂捕蝉黄雀在后"比较形象,关键点就一环套一环,怎么去打比方还是看个人理解了...
举个例子:一个顾客要去一家餐馆吃饭,餐馆有厨师,厨师有食材.以上有对象分别为:顾客,餐馆,厨师,食材;
一.先来理解这2段关于顾客的代码.
#import <Foundation/Foundation.h> #import "Restaurant.h" @interface Custom : NSObject//功能 吃饭 -(void)eatFood:(Cook *)ckp; @end
这是Custom.h文件,ckp指的是厨师,因为只有厨师把饭做好了,顾客才能吃. 头文件导入Restaurant.h,因为厨师是属于餐馆的.
#import "Custom.h" @implementation Custom //实现功能 -(void)eatFood:(Cook *)ckp { //判断有没有饭 if (ckp != nil ) { NSLog(@"开吃"); if (ckp->_age <20) { NSLog(@"但是没吃饱啊!"); }else{ NSLog(@"终于吃饱了!"); } }else{ NSLog(@"吃毛线"); } } @end
这是Custom.m文件,(年龄来表示厨师年龄,20岁一下小厨做的不好吃,所以没吃饱,这里面的情况和本文主题不相关,看不看请朋友们随意).
二.再来看这2段关于餐馆代码.
#import <Foundation/Foundation.h> #import "Cook.h" @interface Restaurant : NSObject //卖饭功能 +(Cook *)sellFood:(int)money; @end
做饭需要厨师,所以在Restaurant.h头文件中导入Cook.h头文件!
餐馆卖饭不需要涉及到食物的属性,所以我们之间创建类方法,这样程序执行效率会高一点.(原理以后在叙述,这里就不过多叙述了).
#import "Restaurant.h" @implementation Restaurant //实现卖饭功能 +(Cook *)sellFood:(int)money { //判断钱够不够 if (money >= 10) { Cook * ckp = [Cook new]; Food * fp = [Food new]; fp->_weight = 2; ckp->_age = 30; return ckp; }else { return nil; } } @end
在restaurant.m文件中执行卖饭行为,必须要有钱才能吃饭啊!(我可没吃过霸王餐,有兴趣的朋友可以试试霸王餐的感觉!)
三.再来看看这2段关于厨师的代码.(不想做厨子的裁缝不是好士兵-----拿破仑).
#import <Foundation/Foundation.h> #import "Food.h" @interface Cook : NSObject //属性 { @public int _age; } //功能 做饭 -(void)makeFood:(Food *)f; @end
大家有没有找到一点"套路",厨子做饭要食材吧!所以导入在Cook.h头文件中导入Food.h头文件.
#import "Cook.h" @implementation Cook //实现做饭功能 -(void)makeFood:(Food *)f { if (f!= nil) { if (_age > 20) { NSLog(@"做饭"); }else{ NSLog(@"做的不好吃"); } }else{ NSLog(@"做的不好吃"); } } @end
这里就是让厨子来做饭了!
四.最后看关于食材的2短代码.(韭菜炒腰子,你们最喜欢吃的!).
#import <Foundation/Foundation.h> @interface Food : NSObject //属性 { @public double _weight; } //功能 甜饱肚子 -(void)fullTripe; @end
食材就是最后一个对象了,所以他不需要导入其他的头文件了.(功能不仅仅是填饱肚子哦!).
#import "Food.h" @implementation Food //功能实现 -(void)fullTripe { if (_weight >= 2) { NSLog(@"吃饱了"); }else{ NSLog(@"没吃饱"); } }
最后食材要完成"历史使命",吃2碗算饱!
五.最后我们就需要一个main.m函数了,前面做的这么多辛苦的事情,在main.m函数中就轻松了!
#import <Foundation/Foundation.h> #import "Custom.h" int main(int argc, const char * argv[]) { /*需求:去餐馆吃饭*/ //来个顾客 Custom *cp = [Custom new]; //买饭 Cook *ckp = [Restaurant sellFood:15]; [cp eatFood:ckp]; //开吃 return 0; }
在main.m函数中,我们需要的是创建一个顾客对象,顾客走近餐馆(厨师就是老板了,小餐馆嘛!),给了15块钱,来了份大碗的韭菜炒猪腰子!
如果觉得代码量和对象比较多的朋友,可以在纸上写出来,一环套着一环,我要执行这一步的时候,我只需要知道上一步就可以了.在这个例子里面,顾客只需要付钱给餐馆(这里厨师就是老板....)就可以吃饭了,不需要知道饭菜是怎么做出来的!
还有重要的一点,有个朋友问我,关于这一块,听起来思路是没问题,可就是做起来就感觉漏洞百出!那我明确告诉你,当你听懂或看懂了50%的时候,剩下的就是重复这个程序,每重复一遍你都回有自己的心得的!(没心得你来打我!).
初学的朋友继续加油!比我更厉害的大神朋友们就请带我飞了~~~哈哈!
OK,就这样了!如有不正之处,还望指出.感激不尽!
----奈文摩尔
标签:
原文地址:http://www.cnblogs.com/naiwenmoer/p/5150085.html