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(初始化)的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. Objective -C Object initialization 对象初始化

    Objective -C Object initialization 对象初始化 1.1 Allocating Objects  分配对象 Allocation is the process by w ...

  3. 【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态

    一. Objective-C 方法详解 1. 方法属性 (1) OC 方法传参机制 Object-C 方法传参机制 : OC 中得参数传递都是值传递, 传入参数的是参数的副本; -- 基本类型 (值传 ...

  4. 吴恩达机器学习笔记47-K均值算法的优化目标、随机初始化与聚类数量的选择(Optimization Objective & Random Initialization & Choosing the Number of Clusters of K-Means Algorithm)

    一.K均值算法的优化目标 K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此 K-均值的代价函数(又称畸变函数 Distortion function)为: 其中

  5. [转] 从 C 到 Objective C 入门1

    转自: http://blog.liuhongwei.cn/iphone/objective-c/ 进军iPhone开发,最大的难点之一就是怪异的Objective C语法了.不过,了解之后才发现,原 ...

  6. 刨根问底Objective-C Runtime

    http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...

  7. iOS: 聊聊 Designated Initializer(指定初始化函数)

    iOS: 聊聊 Designated Initializer(指定初始化函数) 一.iOS的对象创建和初始化 iOS 中对象创建是分两步完成: 分配内存 初始化对象的成员变量 我们最熟悉的创建NSOb ...

  8. Objective-C( Foundation框架 一 字符串)

    Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...

  9. iOS开发——项目实战总结&带你看看Objective-C的精髓

    带你看看Objective-C的精髓 1:接口与实现 @interface...@end @implementation...@end @class 接口(头文件) 实现文件 向前引用 注:类别通过增 ...

  10. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

随机推荐

  1. java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误

    java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误. 问题: 创建了一个工 ...

  2. Qt 学习之路:Canvas

    在 QML 刚刚被引入到 Qt 4 的那段时间,人们往往在讨论 Qt Quick 是不是需要一个椭圆组件.由此,人们又联想到,是不是还需要其它的形状?这种没玩没了的联想导致了一个最直接的结果:除了圆角 ...

  3. [转] 考验你的JavaScript底细

    http://sentsin.com/ 尽管今日的JavaScript已经突飞猛进,但JS的许多特性仍然保留,以下题目并不是有意设坑,许多地方将验证你的JS底细,如果错了一半,请别告诉我你从事前端. ...

  4. 禁止鼠标多次点击选中div中的文字

    <!DOCTYPE html><html><head><meta charset="utf-8"><title>Fire ...

  5. Asp.net Mvc 第一回 安装,并使ASP.NET MVC页面运行起来

    直接上图吧: 1.到官方网站下载:http://www.asp.net/mvc/ Codeplex开源站点:http://www.codeplex.com/aspnet(下载源代码及Futures包) ...

  6. jquery生产和开发的区别

    今天说一下jquery生产和开发的区别,在我们下载jquery的时候,会有两个下载链接,一个是jquery.min.js .迷你版 (生产),另一个是 jquery.js .开发版 .不知道的人可能就 ...

  7. StringHelper类,内容截取,特别适合资讯展示列表

    public class StringHelper    {        /// <summary>        /// 截字符串        /// </summary> ...

  8. Android Cursor类的概念和用法

    http://www.2cto.com/kf/201109/103163.html 关于 Cursor 在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情: ...

  9. copssh加bitvise

    只是简单记录下自己在成功使用的方案: 目的:为了突破公司对网站和qq的限制 具备的条件:一台云服务器.Copssh_4.1.0.bitvise ssh client 4.62.公司电脑客户端 一.首先 ...

  10. SQLite 入门教程(三)好多约束 Constraints

    一.约束 Constraints 在上一篇随笔的结尾,我提到了约束, 但是在那里我把它翻译成了限定符,不太准确,这里先更正一下,应该翻译成约束更贴切一点. 那么什么是约束呢? 我们在数据库中存储数据的 ...