码迷,mamicode.com
首页 > 其他好文 > 详细

个人总结诀窍----oc中对象作为方法连续,重点也是难点.

时间:2016-01-22 02:48:01      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

     相信有不少初学者,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,就这样了!如有不正之处,还望指出.感激不尽!

                                                             ----奈文摩尔

个人总结诀窍----oc中对象作为方法连续,重点也是难点.

标签:

原文地址:http://www.cnblogs.com/naiwenmoer/p/5150085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!