1.匿名对象:就是没有名字对象

    1、匿名对象仅用一次

    使用场景:

    1、当我们仅仅要调用一个对象的某个方法一次的时候能够使用匿名对象

2、匿名对象能够作为函数的实际參数

#import <Foundation/Foundation.h>
#import "CZPerson.h"
#import "CZBook.h" @interface CZBook : NSObject @end @implementation CZBook @end @interface CZPerson : NSObject
{
int _age;//年龄
NSString *_name;//名字
}
//写方法 setter
- (void) setAge:(int) age;
//读方法 getter
- (int) age; - (void) setName:(NSString *) name;
- (NSString *) name;
- (void) readBook:(CZBook *) book; @end @implementation CZPerson //写方法 setter
- (void) setAge:(int) age
{
_age = age;
}
//读方法 getter
- (int) age
{
return _age;
}
- (void) setName:(NSString *) name
{
_name = name;
}
- (NSString *) name
{
return _name;
}
- (void) readBook:(CZBook *) book
{ }
@end
int main(int argc, const char * argv[]) { [[CZPerson new] setAge:10];
/*
1、首先创建一个匿名人对象
2、调用刚创建出来的人对象的 readBook方法
3、传入一个匿名的CZBook对象
[CZPerson new] 创建一个匿名的人对象
[CZBook new] 创建一个匿名的Book对象
*/
[[CZPerson new] readBook:[CZBook new]];
NSLog(@"%d",[[CZPerson new] age]); return 0;
}

2.依赖关系:

   A对象作为B对象的局部变量或是方法形參的,B依赖与A,这时候我们称A与B之间存在一种依赖关系

  面向对象设计中:

  耦合度:当改动一个对象的时候。对另外一个对象的影响程度

  低耦合: 当改动一个对象的对其它对象影响比較小

  高内聚:一个对象只做自己相关的事情

  面向对象设计原则:单一职责原则

#import <Foundation/Foundation.h>
@interface CZBeauty : NSObject
{
NSString * _name;//姓名
}
- (void) setName:(NSString *) name;
- (NSString *) name;
/**
* 给土豪打电话
*/
- (void) callTuHaoWithPhone:(CZPhone *) phone;
- (void) sendMessageToDiaoSi; @end @implementation CZBeauty - (void) setName:(NSString *) name
{
_name = name;
} - (NSString *) name
{
return _name;
}
/**
* 给土豪打电话、
对象作为形式參数
*/
- (void) callTuHaoWithPhone:(CZPhone *) phone
{
NSLog(@"给土豪打电话了");
[phone call:@"土豪的电话号码"];
}
- (void) sendMessageToDiaoSi
{
NSLog(@"给屌丝发送短信了");
// 对象作为另外一个类的局部变量
CZPhone *phone = [CZPhone new];
[phone sendMessage:@"呵呵,要请我看电影吗?"];
} @end @interface CZPhone : NSObject
/**
* 发短信
*
* @param message 信息内容
*/
- (void) sendMessage:(NSString *) message;
/**
* 打电话
*/
- (void) call:(NSString *) phoneNum; @end @implementation CZPhone /**
* 发短信
*
* @param message 信息内容
*/
- (void) sendMessage:(NSString *) message
{
NSLog(@"发送一条 %@ 短信",message);
}
/**
* 打电话
*/
- (void) call:(NSString *) phoneNum
{
NSLog(@"给电话号码为 %@ 的人打电话",phoneNum);
} @end int main(int argc, const char * argv[]) {
// 创建一个美女
CZBeauty *beauty = [CZBeauty new];
// 创建一个电话
CZPhone *phone = [CZPhone new]; [beauty setName:@"fbb"]; [beauty callTuHaoWithPhone:phone]; [beauty sendMessageToDiaoSi]; return 0;
}

3.关联关系(多文件)

           HasA关系:当一个对象拥有另外一个对象的时候,

          当A对象为B对象的成员变量的时候,

          A对象与B对象之间存在一种关联关系

 

 

 关联关系是面向对象中最经常使用一种关系

 ---------------------------------------------------下面了解

 关联关系的耦合度要高于依赖关系

 

 一对一 :单方依赖,双边依赖

 一对多关系 :  班级与学生,一个班级能够有多个学生

 多对多关系 : 学生与课程。一个学生能够学习多门课程,一个门课程被多个学生学习

#import <Foundation/Foundation.h>
#import "CZBeauty.h"
#import "CZNewBeauty.h" int main(int argc, const char * argv[]) {
CZBeauty *beauty = [CZBeauty new];
CZIPad *ipad = [CZIPad new];
CZNewBeauty *newBeauty = [CZNewBeauty new];
[newBeauty setIPad:ipad];
[newBeauty lookAtMovie];
[newBeauty listenToMusic];
[newBeauty playGame];
[newBeauty takeSelfPhoto]; return 0;
} #import <Foundation/Foundation.h>
#import "CZIPad.h"
/*
当我们在一类中总是使用某个对象,作为形式參数,那么我们就把这个參数提取成员变量
*/
@interface CZBeauty : NSObject
//使用iPad看电影
- (void) lookAtMovieWithIPad:(CZIPad *) ipad;
//使用IPad听音乐
- (void) listenToMusicWithIPad:(CZIPad *) ipad;
/**
* 美女玩游戏
*/
- (void) playGameWithIPad:(CZIPad *) ipad;
/**
* 美女自拍
*/
- (void) takeSelfPhotoWithIPad:(CZIPad *) ipad;
@end #import "CZBeauty.h"
@implementation CZBeauty
//使用iPad看电影
- (void) lookAtMovieWithIPad:(CZIPad *) ipad
{
NSLog(@"美女要看电影了! ");
[ipad playMovie];
}
//使用IPad听音乐
- (void) listenToMusicWithIPad:(CZIPad *) ipad
{
NSLog(@"美女要听音乐了!");
[ipad playMusic];
}
/**
* 美女玩游戏
*/
- (void) playGameWithIPad:(CZIPad *) ipad
{
NSLog(@"美女要玩游戏了! ");
[ipad playGame];
}
/**
* 美女自拍
*/
- (void) takeSelfPhotoWithIPad:(CZIPad *) ipad
{
NSLog(@"美女要自拍了! ");
[ipad takePhoto];
} @end #import <Foundation/Foundation.h>
@interface CZIPad : NSObject
//播放电影
- (void) playMovie;
//播放音乐
- (void) playMusic;
//玩游戏
- (void) playGame;
//拍照
- (void) takePhoto; @end #import "CZIPad.h"
@implementation CZIPad
//播放电影
- (void) playMovie
{
NSLog(@"iPad播放电影");
}
//播放音乐
- (void) playMusic
{
NSLog(@"iPad播放音乐");
}
//玩游戏
- (void) playGame
{
NSLog(@"iPad玩游戏");
}
//拍照
- (void) takePhoto
{
NSLog(@"iPad自拍");
} @end #import <Foundation/Foundation.h>
#import "CZIPad.h"
@interface CZNewBeauty : NSObject
{
// 让美女拥有一个IPad
CZIPad * _iPad;
}
//写方法。买一个IPad
- (void) setIPad:(CZIPad *) iPad;
//看电影
- (void) lookAtMovie;
//听音乐
- (void) listenToMusic;
/**
* 美女玩游戏
*/
- (void) playGame;
/**
* 美女自拍
*/
- (void) takeSelfPhoto; @end #import "CZNewBeauty.h"
@implementation CZNewBeauty
//写方法,买一个IPad
- (void) setIPad:(CZIPad *) iPad
{
_iPad = iPad;
}
//看电影
- (void) lookAtMovie
{
NSLog(@"美女看电影");
[_iPad playMovie];
}
//听音乐
- (void) listenToMusic
{
NSLog(@"美女听音乐");
[_iPad playMusic];
}
/**
* 美女玩游戏
*/
- (void) playGame
{
NSLog(@"美女玩游戏");
[_iPad playGame];
}
/**
* 美女自拍
*/
- (void) takeSelfPhoto
{
NSLog(@"美女自拍");
[_iPad takePhoto];
} @end

学习心得:

通过各自相应的样例,熟练掌握面向对象,为以后的学习打好基础

ios学习之旅--oc对象的关系的更多相关文章

  1. IOS学习之路--OC的基础知识

    1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...

  2. 【IOS学习基础】OC类的相关

    几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...

  3. iOS学习15之OC集合

    1.数组类 1> 回顾C语言数组 数组是一个有序的集合, 来存储相同数据类型的元素. 通过下标访问数组中的元素,下标从 0 开始. 2> 数组 数组是一个有序的集合,OC中的数组只能存储对 ...

  4. iOS学习14之OC NSNumber + NSValue

    1.NSNumber 数值类. 作用:实现基本数据类型与OC对象类型的相互转化. 1> NSNumber创建对象 // 初始化方法 NSNumber *num1 = [[NSNumber all ...

  5. IOS基础之 (四) OC对象

    一 建立一个OC的类 完整的写一个函数:需要函数的声明和定义. 完整的写一个类:需要类的声明和实现. 1.类的声明 声明对象的属性和行为 #import <Foundation/Foundati ...

  6. iOS学习10之OC类和对象

    本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...

  7. iOS学习17之OC内存管理

    1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...

  8. iOS学习16之OC集合遍历和数组排序

    1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...

  9. iOS学习13之OC NSString类

    C语言中,字符串是有char(ASC||码)字符组成. OC中,字符串是由unichar(Unicode)字符组成. 1.字符串(NSString) NSString:不可变字符串,即:创建以后,内容 ...

随机推荐

  1. AS .ignore插件 忽略文件

    AS自带的.ignore文件 在AS中新建项目时,默认会创建一个.ignore文件,其中默认忽略的是 *.iml .gradle /local.properties /.idea/workspace. ...

  2. 20 个具有惊艳效果的 jQuery 图像缩放插件

    jQuery相对与Flash的魔力已经贯穿整个网络.尽管,Flash层被认为是用于网页设计的首选,然而随着jQuery的出现,以及他的酷似Flash的交互式特效使得网页更加的优雅——Flash开始靠边 ...

  3. Java基础(十五):Java 中的内部类

    问:什么是内部类呢? 答:内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. 问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多 ...

  4. win7取消任务栏预览并显示文件名

    开始--运行--regedit--回车,然后注册表就打开了,之后开始找到如下的位置,新增2个项 HKEY_CURRENT_USER\Software\Microsoft\Windows\Current ...

  5. 相似qq的IM聊天应用源代码

    这个是IM聊天应用源代码,该应用IM支持实现XMPP,以及图片和表情,语音.消息回执等功能,基本覆盖了常见的im应用的功能了,大家能够參考一下吧. 源代码下载:http://code.662p.com ...

  6. C#.NET常见问题(FAQ)-控制台程序如何输出Messagebox

    1 添加如下引用   2 添加引用和Messagebox的代码.   3 测试可行     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/aceta ...

  7. AVL树的实现例程

    /* AVL树的节点声明 */ #ifndef _AVLTREE_H #define _AVLTREE_H struct AvlNode; typedef struct AvlNode *Positi ...

  8. spring 中常用的配置项

    1.spring 中常用的配置项 application.properties #端口 server.port=8081 #调试模式 debug=false #上下文 #一般情况下,小项目通常都是在t ...

  9. Spring Web MVC 原理学习(下)

             接着上一篇博客,这一篇.我们依据一个简单的demo,来对SpringMVC的原理再次学习:   一.配置web.xml                   我们新建一个web项目.在 ...

  10. JavaScript 复制内容到剪贴板

    <html> <head> <title>Selector</title> <script language="javascript&q ...