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

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

                                                            ----奈文摩尔

时间: 2024-08-09 06:34:20

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

OC中的内省方法初探

内省(Introspection)是对象揭示自己作为一个运行时对象的详细信息的一种能力.NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别. 在iOS开发过程中,有效的使用内省方法.有助于避免错误地进行消息派发.错误地假设对象相等.以及类似的问题.明智地使用内省可以使面向对象的程序更加高效和强壮. OC中的内省方法有: 1,isKindOfClass:检查本实例对象,是否是某个类的对象,包括继承的子类. 2,isMemberOfClass:检查本实例对象,

OC中对象拷贝概念

OC中的对象拷贝概念,这个对于面向对象语言中都会有这种的问题,只是不同的语言有不同的解决方式:C++中有拷贝构造函数,Java中需要实现Cloneable接口,在clone方法中进行操作.但是不过OC更偏向于Java这种方式,OC中如果一个对象需要被拷贝,他需要实现协议:<NSCopying>.<NSMutableCopying>从名字上我们可以看到,一个协议是用于不可变对象的,一个协议适用于可变对象的 首先来介绍一下对象的拷贝的概念吧:为什么要由对象的拷贝这么一个概念呢?看一个场

oc中对象的初始化

在.m文件中使用对象方法: - (id)init { _name [email protected]“zhangsan”; _age = 18; return self; } 然后通过main方法中进行创建对象并初始化:例如: Person *p1 = [[Person alloc] init]; 类方法alloc是分配内存空间,对象方法init是初始化. oc中对象的初始化

OC中属性及方法

1.声明式属性    a.实例变量    b.声明属性        自动生成setter/getter方法        .h ->@property 属性类型 属性名;        .m ->@synthesize 属性名 = 实例变量名;    c.点语法2.IOS5中的属性    a.实例变量  省        会自动生成实例变量,实例变量名 等于 _属性名    b.声明属性        @property 属性类型 属性名;        @synthesize 属性名 =

OC中对象元素的引用计数 自动释放池的相关概念

OC中数组对象在是如何处理对象元素的引用计数问题的,同时介绍一下自动释放池的相关概念 一.数组对象是如何处理对象元素的引用计数问题[objc]  view plaincopy 1. //   2. //  main.m   3. //  26_NSArrayMemeryManager   4. //   5. //  Created by jiangwei on 14-10-12.   6. //  Copyright (c) 2014年 jiangwei. All rights reserve

李洪强iOS开发之OC[018]对象和方法之间的关系

// //  main.m //  18 - 对象和方法之间的关系 // //  Created by vic fan on 16/7/14. //  Copyright © 2016年 李洪强. All rights reserved. // /** * OC有参有返回值的方法 有参有返回值方法的声明 - (int)sum:(int)x andY:(int)y; - (int)sum:(int)x andY:(int)y{ return x+y; 关系: 1 对象作为方法的参数; 显示人的信息

网络与多线程---OC中多线程使用方法(一)

小编在此之前,通过一个小例子,简单的形容了一下进程与线程之间的关系,现在网络编程中的多线程说一下!!! *进程的基本概念 每一个进程都是一个应用程序,都有自己独立的内存空间,一般来说一个应用程序存在一个进程,但也有多个进程的情况:   同一个进程中的线程共享内存中内存和资源. *线程的基本概念 每一个程序都有一个主线程,程序启动时创建(调用main来启动).主线程的生命周期是和应用程序绑定的,程序退出(结束)时,主线程也就停止了.多线程技术表示,一个应用程序都多个线程,使用多线程能提供CPU的使

浅谈OC中排序的方法

这里主要讲三种排序方法(选择器排序.代码块排序.描述信息排序) 以 集合NSArray 为例:

OC中NSString 的方法

NSString *str1 = @"BeiJing"; NSString *str2 = @"beijing"; //全部转为大写 NSLog(@"%@",[str1 uppercaseString]); //全部转为小写 NSLog(@"%@",[str1 lowercaseString]); //首字母大写 NSLog(@"%@",[str1 capitalizedString]); //比较两个字符