objective-c(初始化)
objective-c(初始化)
创建对象 (编程语言 Objective-C 2.0)
1.类对象与实例化
类的定义完成后,编译器在内存中自动生成唯一的类对象,实例对象都是通过调用类对象的类方法生成的。
类对象是工厂,同时也是蓝图,实例对象是产品
创建对象的基本步骤
使用 Objective-C创建对象需要两个基本步骤:
Allocation(内存分配) :为新的对象动态分配一段内存地址
Initialization(初始化):为这段内存空间中填上合适的初始值
只有这两个步骤都完成后,这个对象才能够真正的开始行使功能
创建对象的基本步骤
两个步骤在代码中是分别完成的 但是通常我们将它们合起来一次完成:
id anObject = [[Rectangle alloc] init];
将创建对象的两个步骤分开使得我们可以对这两步过 程分别进行控制内存分配
2.初始化方法的返回值
Allocating Objective-C NSObject 中,
提供了两个默认内存分配方法:
+alloc
+allocWithZone:isa
内存分配方法初始化了新对象的
变量,并将其它所 内存分配方法不应该被复写或进行改动
有变量的值都置为初始化方法的返回值
通常情况下,初始化方法对接收方对象的实例变量进 行初始化,然后将对象本身返回
初始化方法的主要职责是要保证它返回的对象在使用 时不会出现错误初始化方法的返回值
但有时,初始化方法无法正常执行它被要求执行的功 能
1:文件访问错误 有时,初始化方法返回的对象并不是接收者对象本身
2:对象重名
基于上述原因,程序应当使用由初始化方法返回的对 象,而不是直接使用由内存分配方法返回的对象
下面的代码是非常危险的,因为它完全忽视了初始化方法的返回值状态:isa
id anObject = [SomeClass alloc];
[anObject init];
[anObject someOtherMessage];
为了安全地初始化新对象,应该把内存分配方法和初 始化方法结合起来使用:
id anObject = [[SomeClass alloc] init];
[anObject someOtherMessage];
如果初始化方法有可能返回nil,则还需要做检查处
理:
id anObject = [[SomeClass alloc] init];
if ( anObject )
[anObject someOtherMessage];
else ...
3.初始化方法的实现
当新对象被创建伊始,除了它的
变量外,它在内存中的所有位都被置
有时,这样的初始化对于一个对象来说就够用了
但绝大多数的时候,还需要对对象的其它变量赋予初 始值才能保证它能够开始被使用
在这些情况下,需要实现自定义初始化
objective-c(初始化)的更多相关文章
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- Objective -C Object initialization 对象初始化
Objective -C Object initialization 对象初始化 1.1 Allocating Objects 分配对象 Allocation is the process by w ...
- 【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态
一. Objective-C 方法详解 1. 方法属性 (1) OC 方法传参机制 Object-C 方法传参机制 : OC 中得参数传递都是值传递, 传入参数的是参数的副本; -- 基本类型 (值传 ...
- 吴恩达机器学习笔记47-K均值算法的优化目标、随机初始化与聚类数量的选择(Optimization Objective & Random Initialization & Choosing the Number of Clusters of K-Means Algorithm)
一.K均值算法的优化目标 K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此 K-均值的代价函数(又称畸变函数 Distortion function)为: 其中
- [转] 从 C 到 Objective C 入门1
转自: http://blog.liuhongwei.cn/iphone/objective-c/ 进军iPhone开发,最大的难点之一就是怪异的Objective C语法了.不过,了解之后才发现,原 ...
- 刨根问底Objective-C Runtime
http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...
- iOS: 聊聊 Designated Initializer(指定初始化函数)
iOS: 聊聊 Designated Initializer(指定初始化函数) 一.iOS的对象创建和初始化 iOS 中对象创建是分两步完成: 分配内存 初始化对象的成员变量 我们最熟悉的创建NSOb ...
- Objective-C( Foundation框架 一 字符串)
Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...
- iOS开发——项目实战总结&带你看看Objective-C的精髓
带你看看Objective-C的精髓 1:接口与实现 @interface...@end @implementation...@end @class 接口(头文件) 实现文件 向前引用 注:类别通过增 ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
随机推荐
- disconf实践(一)
公司目前的应用基本采用分布式部署,通过F5进行集群管理.分布式应用带来的好处是,随着流量的增加,可以快速扩展应用节点,分摊压力.分布式也会带来一定的挑战,譬如配置文件管理.如果某个配置要修改,那么所有 ...
- vs 点击就设置项目为默认启动项
装好系统没注意 做项目的时候解决方案比较多 发现点击哪个项目哪个项目就成了默认启动项目 这个开始没觉出来 最后发现挺烦人的 想想难道是我装vs装的么 我于是卸载了全新安装了 还是一个吊样 无意间试了下 ...
- Transact-SQL 常用函数 分类: SQL Server 2015-02-03 09:47 284人阅读 评论(0) 收藏
(1)DECLARE 两种用法: 1>: DECLARE @usid VARCHAR(50),@usna NVARCHAR(100),@grna NVARCHAR(100); 2>: DE ...
- Imatest 崩溃
在使用Imatest时候,发现选取chart图的区域时候.Imatest停止工作,例如以下图.百度半天没有找到类似的问题,事实上这个问题在之前的公司也碰到过一回,卸载重N次,无效.如今又碰到了,问之前 ...
- Android 颜色渲染(十) ComposeShader组合渲染
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Android 颜色处理(十) ComposeShader组合渲染 public ComposeShader(Shader sh ...
- Qt 学习之路 :菜单栏、工具栏和状态栏
在之前的<添加动作>一文中,我们已经了解了,Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示.QAction可以添加到菜单上.工具栏上.期间,我们还详细介绍了一 ...
- CSS盒子模型小剖析
前段时间刚刚从C/S过度到B/S,提到B/S就不能说CSS,而说起CSS又不能落下盒子模型.在CSS诞生的时候就有了盒子模型的概念,网页中大部分的元素都能构成一个盒子模型,.盒子模型无非就是描述的元素 ...
- bootstrap3学习1:响应式布局layout
在去年的这个时候写过关于bootstrap的相关文章(见:bootstrap2学习1:基本CSS样式),然后就搁置了,原因是因为当时对bootstrap的了解不深,并且当时v2版本对响应式设计的不是非 ...
- iOS Safari 中点击事件失效的解决办法
问题描述 当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. ...
- 快速打出System.out.println("");
sysout---->Alt+/--->System.out.println():