Objective-C:dealloc、组合与聚合
来源:互联网 发布:js时间控件使用 编辑:程序博客网 时间:2024/05/05 05:20
1.dealloc方法
1.1 用于释放malloc的空间 (会自动调用)
.h文件
#import <Foundation/Foundation.h>@interface CZExample : NSObject@end
.m文件
#import "CZExample.h"@implementation CZExample-(instancetype)init{ if (self = [super init]) { NSLog(@"对象被创建了"); } return self;}-(void)dealloc{ NSLog(@"对象被销毁了");}@end
main函数
int main(int argc, const char * argv[]) { @autoreleasepool { CZExample *e = [[CZExample alloc] init]; NSLog(@"------"); } NSLog(@"++++++"); return 0;}
运行结果
2016-08-25 08:40:52.116 day16_01[649:21125] 对象被创建了2016-08-25 08:40:52.116 day16_01[649:21125] ------2016-08-25 08:40:52.117 day16_01[649:21125] 对象被销毁了2016-08-25 08:40:52.117 day16_01[649:21125] ++++++Program ended with exit code: 0
2. 组合与聚合
2.1 是指两个(以上)类之间的一种关系2.2 是(一个)整体类与(多个)部分类之间的关系2.3 组合是两个类的强关系,及同生共死。下面是组合的例子
建一个Button类
.h文件
#import <Foundation/Foundation.h>@interface CZButton : NSObject@end
.m文件
#import "CZButton.h"@implementation CZButton-(instancetype)init{ if (self = [super init]) { NSLog(@"按钮被创建了"); } return self;}-(void)dealloc{ NSLog(@"按钮被销毁了");}@end
建一个Edit类
.h文件
#import <Foundation/Foundation.h>@interface CZEdit : NSObject@end
.m文件
#import "CZEdit.h"@implementation CZEdit-(instancetype)init{ if (self = [super init]) { NSLog(@"编辑框被创建了"); } return self;}-(void)dealloc{ NSLog(@"编辑框被销毁了");}@end
建一个Window类
.h文件
#import <Foundation/Foundation.h>#import "CZButton.h"#import "CZEdit.h"@interface CZWindow : NSObject{ CZButton *_button;//部分类CZButton只能作为整体类CZWindow的成员变量,不能用property定义成属性 CZEdit *_edit;}@end
.m文件
#import "CZWindow.h"@implementation CZWindow-(instancetype)init{ if (self = [super init]) { NSLog(@"窗口被创建了"); _button = [[CZButton alloc] init]; _edit = [[CZEdit alloc] init]; } return self;}-(void)dealloc{ NSLog(@"窗口被销毁了");}@end
main函数
#import <Foundation/Foundation.h>#import "CZWindow.h"int main(int argc, const char * argv[]) { @autoreleasepool { CZWindow *win = [[CZWindow alloc] init]; NSLog(@"------"); } NSLog(@"++++++"); return 0;}
运行结果
2016-08-25 08:54:30.091 day16_03[706:27193] 窗口被创建了2016-08-25 08:54:30.092 day16_03[706:27193] 按钮被创建了2016-08-25 08:54:30.092 day16_03[706:27193] 编辑框被创建了2016-08-25 08:54:30.092 day16_03[706:27193] ------2016-08-25 08:54:30.092 day16_03[706:27193] 窗口被销毁了2016-08-25 08:54:30.092 day16_03[706:27193] 编辑框被销毁了2016-08-25 08:54:30.092 day16_03[706:27193] 按钮被销毁了2016-08-25 08:54:30.092 day16_03[706:27193] ++++++Program ended with exit code: 0
2.4 聚合是两个(以上)类的弱关系,不要求同生共死。(但也可以实现)。下面是聚合的例子
建一个Mouse类
.h文件
#import <Foundation/Foundation.h>@interface CZMouse : NSObject@end
.m文件
#import "CZMouse.h"@implementation CZMouse-(instancetype)init{ if (self = [super init]) { NSLog(@"鼠标被创建了"); } return self;}-(void)dealloc{ NSLog(@"鼠标被销毁了");}@end
建一个Computer类
.h文件
#import <Foundation/Foundation.h>#import "CZMouse.h"@interface CZComputer : NSObject@property CZMouse *mouse; //要将部分类定义成属性@end
.m文件
#import "CZComputer.h"@implementation CZComputer-(instancetype)init{ if (self = [super init]) { NSLog(@"计算机被创建了"); } return self;}-(void)dealloc{ NSLog(@"计算机被销毁了");}@end
main函数
#import <Foundation/Foundation.h>#import "CZComputer.h"int main(int argc, const char * argv[]) { @autoreleasepool { CZMouse *m = [[CZMouse alloc] init]; NSLog(@"------"); { CZComputer *com = [[CZComputer alloc] init]; com.mouse = m; // CZMouse *m1 = [[CZMouse alloc] init]; // com.mouse = m1; //加上上边两行代码可以实现同生共死 } NSLog(@"======"); } NSLog(@"++++++"); return 0;}
输出结果
2016-08-25 09:03:25.939 day16_05[747:30875] 鼠标被创建了2016-08-25 09:03:25.940 day16_05[747:30875] ------2016-08-25 09:03:25.940 day16_05[747:30875] 计算机被创建了2016-08-25 09:03:25.940 day16_05[747:30875] 计算机被销毁了2016-08-25 09:03:25.940 day16_05[747:30875] ======2016-08-25 09:03:25.940 day16_05[747:30875] 鼠标被销毁了2016-08-25 09:03:25.940 day16_05[747:30875] ++++++Program ended with exit code: 0
0 0
- Objective-C:dealloc、组合与聚合
- OC-dealloc、组合与聚合以及面向对象的三大特征...
- 【Objective-C】OC中的Dealloc方法详解
- [Objective-C]OC中的Dealloc方法详解
- Swift中 deinit 取代 Objective-C dealloc
- Objective-C的继承与组合
- 聚合与组合
- 聚合与组合
- 聚合与组合
- 聚合与组合
- UML聚合与组合
- 组合与聚合
- 组合与聚合
- Objective C--组合模式
- Objective C 组合模式
- 组合与聚合的关系
- 组合与聚合的区别
- 聚合与组合的区别
- 语音识别系统及科大讯飞最新实践
- VS2013配置OpenCV2.4.9出现fatal error LNK1104:无法打开文件kernel32.lib的解决方法
- 线程池模块分析 (CPU thread pool device)
- MatMul 矩阵乘积运算 (前向计算,反向梯度计算)
- 数据结构实验之排序四:寻找大富翁
- Objective-C:dealloc、组合与聚合
- 处理String特殊符号
- MFC入门(一)-- 第一个简单的windows图形化界面小程序(打开计算器,记事本,查IP)
- OS—printf
- Compare two internal tables
- codeforces 699 B. One Bomb (思维)
- 索引都有哪些类型
- GreenDao进阶篇(二)
- Java并发问题的非阻塞解决方案