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.初始化方法的实现

    

    当新对象被创建伊始,除了它的

    变量外,它在内存中的所有位都被置

    有时,这样的初始化对于一个对象来说就够用了

    但绝大多数的时候,还需要对对象的其它变量赋予初 始值才能保证它能够开始被使用

    在这些情况下,需要实现自定义初始化

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用sphinx快速为你python注释生成API文档

sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发。新版的Python3文档就是由sphinx生成的,并且它已成为Python项目首选的文档工具,同时它对C/C项目也有很好的…

c#中使用ref和out传值

c#中使用ref和out传值 首先,如果不使用这两个关键字,那是什么样 呢?看下面的例子:使用ref:using System; class Test {     static void Swap(ref int x, ref int y)     {         int temp x;         x y;         y temp;     }  …

python临床数据_从临床试验中获取数据

我正在开发一个小Python函数来从clinicalTrials.gov中获取数据。从每个研究记录中,我想从中找出研究的目标条件。例如,对于this研究记录,我需要以下内容:conditions [Rhinoconjunctivitis, Rhinitis, Conjunctivitis. Allergy]然…

Jass 技能模型定义(转)

Jass是什么?先阐释一下什么是jass吧,百度:JASS(正确地说是JASS 2)是魔兽3的程序语言,用于控制游戏和地图的进行,也是魔兽游戏和地图的基础。 地图编辑器中摆放的单位(Unit),区域(Reg…

[原]第一次遭遇Oracle的Bug,纪念一下 |ORA-00600 kmgs_pre_process_request_6|

今天尝试调整一下Oracle的Large Pool Size,希望使rman的速度提升, alter system set large_pool_size80m ; 突然Oracle 实例挂掉了,查看alert file 发现如下 Wed Dec 16 11:14:49 2009 Errors in file /u01/app/admin/mydb/bdump/mydb_mman_…

表格过滤器_不用记账软件也可以记录支出明细,这个在线协同表格很方便

像我们这种中小团队,以前就用 Excel 来记录团队日常的一些支出情况,虽然有很多模板可以套用,但感觉还是有些不便之处,比如在表格里无法记录太多文字;添加发票凭证也不方便;对于不同数据的切换查看也缺乏灵活…

喜马拉雅第三方客户端开发(接口和接口数据解析)。

前言:最近闲来无事,看了网上豆瓣的第三方客户端,手有点痒,决定自己动手开发一个客户端,比较了荔枝和喜马拉雅,决定开发喜马拉雅的第三方客户端。 客户端使用了WPF开发。 1.抓取接口; 首先得解决…

life list 2010

1. water -1.no water-warm water.less 2. anything - very kindly 3. clean - any room. 4.money is working,no lazy. 转载于:https://www.cnblogs.com/byeday/archive/2009/12/16/1625902.html

聚合复合_聚合复合微生物菌剂的功能

不点蓝字关注我飞走啦!在经营肥料上来讲,大家都知道做复合微生物菌剂,不仅可以活化疏松土壤,而且在各种作物上抗逆、防病、增产的效果都非常的好。问为什么说大家都要重点使用聚合微生物菌剂呢?答因为聚合微生物菌剂和…

Linux命令 — 设置或查看网络配置命令ifconfig

1. 命令介绍命令格式:ifconfig 【interface】 【options】address主要参数:interface:网络接口名up:打开网络接口down:关闭网络接口broadcast:设置网络接口的广播地址netmask:设置网络接口的子网…

代理模式详解(静态代理和动态代理的区别以及联系)

原文链接:https://www.cnblogs.com/takumicx/p/9285230.html 1. 前言 代理模式可以说是生活中处处可见。比如说在携程上定火车票,携程在这里就起到了一个代理的作用,比起我们在官网上或者直接去柜台订票,携程可以为用户提供更多人性化的选择。再比如代购,我自己的mb…

unity自动生成敌人_unity 2d AI 敌人 自动追踪(1)

今天介绍第一种只靠 c# 代码的 简单 AI 敌人 追踪方法:简单粗暴 ,上代码1,新建对象2,代码如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class AI : MonoBehaviour{publi…

一个简单的HelloWorld程序

/* * 编译器:  VC6.0 * 类 型:  C语言 */ 1 #include <stdio.h>//#includes代表是C预处理指令,stdio.h代表是在此行位置键入了库文件stdio.h的完整内容,是标准输入输出头文件,< and >代表是直接从库文件加载stdio.h文件。2 3 intmain(void)//int代表此main…

sass 安装配置和使用

一、什么是SASSSASS在CSS的基础上做了一些扩展&#xff0c;使用SASS你可以使用一些简单的编程思想进来编写CSS。比如&#xff0c;SASS中可以定义变量、混合、嵌套以及 函数等功能。只不过SASS不像CSS&#xff0c;可以直接运用到项目中&#xff0c;如果你需要将样式运用到项目中…

为什么我的对象被 IntelliJ IDEA 悄悄修改了?

背景 最近&#xff0c;在复习JUC的时候调试了一把ConcurrentLinkedQueue的offer方法&#xff0c;意外的发现Idea在debug模式下竟然会 “自动修改” 已经创建的Java对象&#xff0c;当时觉得这个现象很是奇怪&#xff0c;现在把问题的原因以及解决过程记录下来&#xff0c;希望你…

python加密程序_Python加密程序

展开全部alpabcdefghijklmnopqrstuvwxyz0123456789 def num2alp(c):a alp[c]return(a)def alp2num(d):if d ! :return((ord(d)-97)%37)else:return 36def envVigenere(key,plaintext):m len(plaintext)n len(key)etext ""for i in range(m):p plaintext[i]k k…

如何判断网通、电信、铁通IP地址分配段

从http://ftp.apnic.net/apnic/dbase/tools/ 获取地址 shell> wget http://ftp.apnic.net/apnic/dbase/tools/ripe-dbase-client-v3.tar.gz shell> tar xzvf ripe-dbase-client-v3.tar.gz shell> cd whois-3.1 shell> ./configure shell> make 完成上述编译安…

​std::multimap

2019独角兽企业重金招聘Python工程师标准>>> std::multimap multimap,是一个关联性容器,用于存放这样的元素,这些元素是由键以及关联的值组成.容器内容将根据元素的键进行排序.并且容器可以插入多个具有相同键的元素.接口 pair<const_iterator,const_iterator>…

python调用msfconsole全自动永恒之蓝攻击_MSF之MS17-010永恒之蓝漏洞利用

Loading...请注意&#xff0c;本文编写于 392 天前&#xff0c;最后修改于 116 天前&#xff0c;其中某些信息可能已经过时。# MSF之MS17-010永恒之蓝漏洞利用1. 准备阶段2. 扫描漏洞3. 漏洞攻击---## 准备阶段**实验准备环境&#xff1a;**攻击机&#xff1a;虚拟机kali系统IP…

容器部署解决方案Docker

一、Docker简介 1.1 虚拟化 【什么是虚拟化】 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&…