黑马程序员——ARC机制总结和用ARC建立模型
ARC 全称:Automatic Reference Counting
使用ARC 只需要在建立一个新的项目的时候把 下面的√打上
Xcode5以后都会默认建议开发者使用ARC机制
新的项目中如果有部分文件不想使用ARC就 在Build Phases中找到那个文件 后面修改成-fno-objc-arc
就得项目中如果有部分文件想使用ARC就 Build Phases中找到那个文件 后面修改成-f-objc-arc
在使用了ARC开发程序中不能再出现release或者autorelease 否则就报错
源码:http://www.jinhusns.com/Products/Download/?type=xcj
如果想把整个就项目直接转化成ARC就 点Edit -》Refactor-》Counvert to OC ARC
1.ARC特点
1> 不允许调用release、retain、retainCount
2> 允许重写dealloc,但是不允许调用[super dealloc]
3> ARC的判断准则:只要没有强指针指向对象,就会释放对象
2 @property的参数
* strong :成员变量是强指针(适用于OC对象类型)
* weak :成员变量是弱指针(适用于OC对象类型)
* assign : 适用于非OC对象类型
* 以前的retain改为用strong
指针分2种:
1> 强指针:默认情况下,所有的指针都是强指针 __strong
2> 弱指针:__weak
// *错误写法(没有意义的写法)
__weak Person *p = [[Person alloc] init];
// *循环引用时的解决方法
一端改成strong 一端改成retain
在学习了ARC的知识之后 发现代码又再次精简了许多,完全不用管内存管理里的事了,就像MJ老师说的苹果 想让程序员的100%的经历 都放在业务上而不是抽出50%放在内存管理上。 代码有五个时段
时段一:刚开始是所有set和get都要自己写,内存管理全部自己写。
时段二:有了@property自动生成声明 和 @synthesize自动生成实现
时段三:@property包含了 自动声明实现的功能 只写这一个就够了
时段四:出了autorelease ,不用再关心release 和 程序中的代码的先后关系了,有了自动缓冲池@autorelesepool,只要写了autorelease 它会在程序代码块之后自动全部释放。
时段五:有了ARC之后什么都不管了。
然后老师讲了一个建立一个模型建立的是 新浪微博转发状态的模型,我在看懂之后自己也尝试着建立了一个模型
是品牌下有自己的产品 一个品牌的产品可以加工另一个公司的产品
我建立的是一个是富士康公司生产出手机值900元 然后苹果加工后就成了iphone值5688元
下面是代码
main.m
//
// main.m
// Model
//
// Created by 董 尚先 on 14-10-9.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Brand.h"
#import "Product.h"
int main()
{
// 创立一个苹果公司
Brand *b1 = [[Brand alloc]init];
b1.name = @"apple";
// 创立一个富士康公司
Brand *b2 = [[Brand alloc]init];
b2.name = @"fushikang";
// 富士康生产一个手机啊
Product *p1 = [[Product alloc]init];
p1.name = @"phone";
p1.price = 900.00;
p1.brand = b2;
// 苹果以那个为原材料加工一下
Product *p2 = [[Product alloc]init];
p2.name = @"iphone";
p2.RawProduct = p1;
p2.price = 5688.88;
p2.brand = b1;
return 0;
}
Brand.h // 品牌类
//
// Brand.h
// Model
//
// Created by 董 尚先 on 14-10-9.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef struct {
int year;
int month;
int day;
} Date;
@interface Brand : NSObject
// 建立品牌的名称
@property (nonatomic, strong) NSString *Name;
// 建立这个品牌的创立时间
@property (nonatomic, assign) Date SinceTime;
// 建立一个品牌Logo 存放资源的URL
@property (nonatomic, strong) NSString *Logo;
// 建立一个总部电话 用字符串存储
@property (nonatomic, strong) NSString *Centerphone;
// 此品牌旗下的产品数量
@property (nonatomic, assign) int OwnProductNumber;
@end
Product.h //产品类
//
// Product.h
// Model
//
// Created by 董 尚先 on 14-10-9.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import <Foundation/Foundation.h>
@class Brand;
@interface Product : NSObject
// 产品的名称
@property (nonatomic, strong) NSString *Name;
// 产品的效果图
@property (nonatomic, strong) NSString *Photo;
// 产品所属公司
@property (nonatomic, strong) Brand *brand;
// 产品的原材料
@property (nonatomic, strong) Product *RawProduct;
// 产品的价格
@property (nonatomic, assign) double price;
@end
然后 Brand.m 和 Product.m 都是自动生成的里面代码没啥意义就不发了。
ARC的功能很强大,我们这批学ios的程序员是赶上好时候了啊,估计苹果以后还会出各式各样的方便自动生成的方法。一起期待吧。
黑马程序员——ARC机制总结和用ARC建立模型的更多相关文章
- 黑马程序员—C语言的函数、数组、字符串
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...
- 黑马程序员:Java基础总结----类加载器
黑马程序员:Java基础总结 类加载器 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ...
- 黑马程序员:Java基础总结----反射
黑马程序员:Java基础总结 反射 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 反射 反射的基石:Class类 Class类代表Java类,它的各个实例对象又分别 ...
- 黑马程序员:Java基础总结----GUI图形化界面
黑马程序员:Java基础总结 GUI图形化界面 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! GUI(Graphical User Interface)图形化界 ...
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- 黑马程序员:轻松精通Java学习路线连载1-基础篇!
编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...
- 黑马程序员:3分钟带你读懂C/C++学习路线
随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者.而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移 ...
- 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具
Java学习路线图引言: 黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...
- 黑马程序员面试宝典(Java)Beta6.0免费下载
场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? ...
- 【黑马程序员C++ STL】学习记录
黑马程序员 2017 C++ STL 教程(STL 部分已完结) 基于黑马STL课程整理:黑马程序员2017C++STL教程 视频链接 专栏:本STL专栏目录 文章目录 黑马程序员 2017 C++ ...
随机推荐
- Kooboo CMS技术文档之一:Kooboo CMS技术背景
语言平台 依赖注入方案 存储模型 1. 语言平台 Kooboo CMS基于.NET Framework 4.x,.NET Framework 4.x的一些技术特性成为站点开发人员使用Kooboo CM ...
- ASP.NET Core 中文文档 第五章 测试(5.2)集成测试
原文: Integration Testing 作者: Steve Smith 翻译: 王健 校对: 孟帅洋(书缘) 集成测试确保应用程序的组件组装在一起时正常工作. ASP.NET Core支持使用 ...
- C# salt+hash 加密
一.先明确几个基本概念 1.伪随机数:pseudo-random number generators ,简称为:PRNGs,是计算机利用一定的算法来产生的.伪随机数并不是假随机 数,这里的" ...
- TFS 2015 敏捷开发实践 – 在Kanban上运行一个Sprint
前言:在 上一篇 TFS2015敏捷开发实践 中,我们给大家介绍了TFS2015中看板的基本使用和功能,这一篇中我们来看一个具体的场景,如何使用看板来运行一个sprint.Sprint是Scrum对迭 ...
- docker4dotnet #1 – 前世今生 & 世界你好
作为一名.NET Developer,这几年看着docker的流行实在是有些眼馋.可惜的是,Docker是基于Linux环境的,眼瞧着那些 java, python, node.js, go 甚至连p ...
- MySQL常见面试题
1. 主键 超键 候选键 外键 主 键: 数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null). 超 键: 在关系中 ...
- vue2.0构建淘票票webapp
项目描述 之前一直用vue1.x写项目,最近为了过渡到vue2.0,特易用vue2.0栈仿写了淘票票页面,而且加入了express作为后台服务. 前端技术栈:vue2.0 + vue-router + ...
- 全球HTTPS时代已来,你跟上了吗?
全球HTTPS时代已来,你跟上了吗? 互联网发展20多年,大家都习惯了在浏览器地址里输入HTTP格式的网址.但前两年,HTTPS逐渐取代HTTP,成为传输协议界的"新宠". 早 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- JavaScript动画知多少?
今天,小学生以自己浅薄的见地,在前辈大能的基础上写这篇文章,希望给大家打开一扇窥探JavaScript(以下简称JS)动画的窗户. JS如何制造出动画效果? 结合浏览器提供的 setInterval ...