Objective-C构造方法

构造方法:用来初始化的方法

创建对象的原理

之前我们创建对象的方式一直是使用[Xxx new]

但是使用 new 创建的对象,都是给我们默认做了初始化的。

有的时候,我们需要按照我们自己的需求进行初始化,那么怎么做呢

首先了解一下,我们使用new 创建对象的时候,都做了什么事情。

创建对象的过程

  1. 分配存储空间(+ alloc)

    调用类方法 alloc 来给对象分配一块存储空间。

  2. 初始化(- init)

    调用成员方法 init 来给对象初始化。

也就是说:

之前我们通过 [Xxx new] 的方式来创建对象

其实就是等于做了 [[Xxx alloc] init] 这样的操作

但是:

系统默认的init都是给我们做的默认的初始化

那么:

如果我想自己做初始化

就需要重写init方法(构造方法)

重写 init 构造方法

  • 重写init构造方法的几个要素

    1. 在.m文件重写 -init 方法
    2. 必须先调用父类的 -init 方法,先初始化父类里的一些成员对象和其他属性
    3. 父类初始化成功,才有必要重写初始化内容
    4. 返回初始化完成的对象

  • #import "People.h" @implementation People - (id)init
    {
    // 首先初始化父类里的成员变量和一些属性
    if(self = [super init])
    {
    // 父类初始化成功以后,自定义初始化内容
    _age = 1;
    }
    // 返回初始化成功后的对象
    return self;
    } @end
  • 测试


    #import <Foundation/Foundation.h> #import "People.h" int main(int argc, const char * argv[]) {
    @autoreleasepool {
    People *p = [People new];
    NSLog(@"%d", p.age);
    }
    return 0;
    }
  • 结果

    创建对象,就将年龄初始化为1

Objective-C构造方法的更多相关文章

  1. Automake

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

  2. iOS开发核心语言Objective C —— 全部知识点总结

    本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...

  3. 那些年我们学过的构造函数(构造方法,C#)

    构造函数也称构造方法,在面向对象中称为构造方法,在面向过程中称为构造函数;C#是面向对象的语言,所以以下都称为构造方法, OK,下面我们先看一下什么是构造函数 class Dog { //创建一个狗类 ...

  4. 匿名对象 构造方法 重载 构造代码块 this 关键字

    一.匿名对象 1.匿名对象 :没有名字对象 2.匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值,无法获取属性值. 2.匿名对象永远都不可能事一个对象. 3.匿名对象的好处 : 书写简单. ...

  5. java中构造方法的特殊性

    构造方法名与类名相同 构造方法没有返回值,也不能写void 构造方法的主要作用是完成对对象的初始化工作 构造方法一般不由编程人员显示调用,而是由new来调用 在创建一个类的对象的同时,系统会自动调用该 ...

  6. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

  7. java构造方法的作用以及简单java类

    public class TestDemo{ public static void main(String args[]){ Emp emp1 =new Emp(001,"tom" ...

  8. Java---类加载机制,构造方法,静态变量,(静态)代码块,父类,变量加载顺序

    直接上代码: 代码1: public class ConstroctTest { private static ConstroctTest test = new ConstroctTest(); // ...

  9. Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法

    NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...

  10. php构造方法与析构方法

    1. 构造方法 <?php //构造方法 __construct() 是在实例化对象时被自动调用 //用途:可以用于初始化程序(可以给成员属性赋值,也可以调用成员方法) //语法:[修饰符] f ...

随机推荐

  1. 再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

    这篇是对angularJS的一些疑点回顾,是对目前angularJS开发的各种常见问题的整理汇总.如果对文中的题目全部了然于胸,觉得对整个angular框架应该掌握的七七八八了.希望志同道合的通知补充 ...

  2. ubuntu12.04更新到14.04,win7误删BCD引导项,导致两个系统都无法进入

    解决办法: 制作老毛桃U盘启动盘,使用BCD编辑软件,对C/boot下的BCD文件进行编辑,添加win7引导向. 开机进入win7后,使用easyBCD添加ubuntu14.04启动项,选择grub2 ...

  3. [LeetCode] Max Chunks To Make Sorted 可排序的最大块数

    Given an array arr that is a permutation of [0, 1, ..., arr.length - 1], we split the array into som ...

  4. [LeetCode] Convert BST to Greater Tree 将二叉搜索树BST转为较大树

    Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original B ...

  5. Python系列之 - 字符编码问题

    1.内存和硬盘都是用来存储的. CPU:速度快 硬盘:永久保存 2.文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就可以启动一个进程,是在内存中的,所以在编辑器编 ...

  6. 使用tkinter加载png,jpg

    最近来使用tkinter加载图片时遇到了困难,按照资料写了 photo = PhotoImage(file='ques.png') imglabel = Label(root, image=photo ...

  7. Shell的基本命令(第一天),根据w3c学习得

    Shell是一种应用程序,提供一个界面访问操作系统内核的服务. 1:编写shell脚本 vi test.sh #!/bin/bash #指定这个脚本需要什么解释器来执行 echo "Hell ...

  8. [SDOI2016]游戏

    Description Alice 和 Bob 在玩一个游戏. 游戏在一棵有 n 个点的树上进行.最初,每个点上都只有一个数字,那个数字是 123456789123456789. 有时,Alice 会 ...

  9. CSAPP-程序优化

    代码移动: 如果一个表达式总是得到同样的结果,最好把它移动到循环外面,这样只需要计算一次.编译器有时候可以自动完成,比如说使用 -O1 优化.一个例子: void set_row(double *a, ...

  10. codeforces round #419 A. Karen and Morning

    Karen is getting ready for a new school day! It is currently hh:mm, given in a 24-hour format. As yo ...