OC重写init方法

在创建一个对象的时候我们经常会用到init方法,单单是init只能是初始化,当我们在初始化的时候想要给这个对象加上默认的东西的时候,

系统提供的init方法就不能满足我们的需要,这时,就需要我们自己去重写init方法;

通常在使用init方法的时候,系统先会在自己这个类中查询是否实现(重写)这个方法,如果没有实现,就会逐层向上面的父类查找,直到

找到实现了的init方法,其他方法的执行顺序也是这样。

1.首先创建一个Person 类和一个Car 类

2.在Car类里面定义属性(我们要的效果是输出:小王有一辆红色奥迪A8 。并且在创建类的时候使用自己重写的init方法)

3.在Person类中导入Car类,定义属性

4.重写Car类和Person类中的init方法

5.创建对象进行输出

这样虽然初始化成功了,但是灵活性太差,我们还可以这样做,写一个initWith样式的方法

Car.h

Car.m

Main.m

原文地址:https://www.cnblogs.com/laorenyuhail/p/9532040.html

时间: 2024-11-03 19:38:00

OC重写init方法的相关文章

[Objective-c 基础 - 2.7] 构造方法、重写init方法

A.id 万能指针,可以指向任何对象,实质是NSObject的指针,使用的时候不用加上* B.NSObject中得类方法new 1.完整地创建一个可用对象步骤 (1)分配存储空间 + alloc (2)初始化 - init 1 // 1.调用+alloc分配存储空间 2 Person *p1 = [Person alloc]; 3 // 2.调用-init进行初始化 4 Person *p2 = [p1 init]; 5 // 同时进行分配存储空间和初始化 6 Person *p3 = [[Pe

IOS开发中重写init方法使用需谨慎

IOS开发中重写init方法使用需谨慎 今天在写一个小软件的时候出现一点问题,这个软件的功能是搜索全国学校,首页就是搜索输入框,在框中输入完要查询的学校所在省份,点击buttom后就会跳转到对应的视图控制器中,然后把搜索结果呈现在一个TableView上,但是我在调试时,每次输入完然后点击搜索按钮时,弹出结果列表总是空的,我需要返回到首页再点击一次搜索才会出现结果,而且我在首页更改搜索关键字之后,点击搜索,结果还是上次的搜索结果,必须返回点击一次才会出现这次的搜索结果. 经过大神指点,原来这个问

iOS开发之oc(八)--小知识补充 init方法补充

小知识补充 一. id 1. 简介 万能指针,能指向任何OC对象,相当于NSObject * id类型的定义 typedef struct objc_object { Class isa; } *id; 2. 使用 // 注意:id后面不要加上* id p = [Person new]; 3. 局限性 调用一个不存在的方法,编译器会马上报错 二. .h和.m文件的抽取 1)每个类分布在不同文件中 2)类的声明放在.h文件,类的实现放在.m文件 3)若想使用某个类,就包含某个类的.h声明文件 三.

init方法的重写与自定义

1.为什么要重写或是自定义init方法? 系统默认初始化为0(基本数据类型)或是空(指针数据类型),但是我们想要自己定义一个想要的初始值,这个时候就要重写或者自定义init方法. 2.做法: 先声明一个属性变量 (1)重写 (2)自定义(比较灵活,我们一般用这种) 原文地址:https://www.cnblogs.com/frosting/p/9426859.html

OC 重写description,isEqual方法

// 为了能用%@打印出对象的有效信息,需要重写description方法 - (NSString *)description { // 最简单的办法是将属性和值组合成键值对存放到字典中 // 这样只需要调用字典的description方法就能获取对应的描述字符串 NSDictionary *dictionary = @{@"name" : name_, @"address" : address_, @"friends" : friends_};

OC小实例关于init方法不小心的错误

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

OC 的核心方法总结

核心语法 一. 点语法 p.age不是访问的成员变量,而这就是oc中的点语法,点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开相应的方法.切记点语法的本质是转换成相应的set和get方法. (在OC中访问成员变量的方法只有一种,"->"作为访问成员变量的方法) 点语法使用注意: a)    Self.age= age; return self.age;这两种情况下会引发死循环! b)   如果没有set和get方法,则不能使用点语法. 二. 成员变量

关于继承时子类重写父类方法和覆盖父类变量的若干问题

假设,子类重载父类的方法,并将子类的成员覆盖. 创建子类对象实例,将其上转型成父类. 例子1 public class Parent { public void init() { System.out.println("1 init parent"); this.demo(); } public void demo() { System.out.println("2 demo parent"); } } public class Son extends Parent

Swift中的init方法

摘要:Swift有着超级严格的初始化方法,不仅强化了designated初始化方法的地位,所有不加修饰的init方法都需要在方法中确保非Optional的实例变量被赋值初始化,而在子类中,也强制调用super版本的designated初始化. 我们在深入初始化方法之前,不妨先再想想Swift中的初始化想要达到一种怎样的目的. 其实就是安全.在Objective-C中,init方法是非常不安全的:没有人能保证init只被调用一次,也没有人保证在初始化方法调用以后,实例的各个变量都完成初始化,甚至如