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. 对象创建原理

new的拆分两部曲

u  分配内存(+alloc)

u  初始化(-init)

Person *p1 = [Person alloc];
Person *p1 = [p1 init];
合成一句后:
Person *p = [[Person alloc] init];

2. init方法的重写

l   想在对象创建完毕后,成员变量马上就有一些默认的值

l   init方法的重写过程

- (id)init
{// 1.一定要调用super的init方法:初始化父类中声明的一些成员变量和其他属性//  self = [super init];   // 当前对象 self// 2.如果初始化成功,才有必要进行接下来的初始化
    if (self = [super init])
    { // 初始化成功
        _age = 10;
    }
    return self; // 3.返回一个已经初始化完毕的值
}

3.自定义构造方法

l   构造方法的一些规范

  • - (id)initWithAge:(int)age {
        if (self = [super init]) {
            _age = age;
        }
        return self;
    }

    传递多个参数进行初始化

    - (id) initWithAge:(int)age  andNo:(int)no;

    返回值是id类型

  • 方法名都以init开头
时间: 2024-10-04 01:00:21

iOS开发之oc(八)--小知识补充 init方法补充的相关文章

李洪强iOS开发之OC语言基础知识

OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO面向对象.OOP面向对象编程   二.类 (一)关于类 类的设计只关注三个东西:类名.属性和方法 注意:一般名词都是类,拥有相同属性和行为的对象都可以抽象为一个类,类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识.在对方法进行

ios开发之OC基础-类和对象

本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再将零散的知识点整理出来.这样的学习方法会带来更多的收获,同时要多做练习,按照思路,默写.改写代码.在这里,感谢欧阳坚老师,学习你的课程使我走上了ios的开发之路. 一定要明确一个要从事的方向,要不然就会感到迷茫.学习ios开发,并且从事ios开发这个行业,这就是我的选择.看到我的博客系列文章,其中大

李洪强iOS开发之OC语言构造方法

OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法来分配存储空间(返回分配的对象):2)使用init方法来对对象进行初始化. 可以把new方法拆开如下: 1.调用类方法+alloc分配存储空间,返回未经初始化的对象 Person *p1=[person  alloc]; 2.调用对象方法-init进行初始化,返回对象本身 Person *p2=[p

iOS开发之oc(十八)--Foundation(3)NSArray和NSMutableArray

NSArray :不可变数组 NSMutableArray : 可变数组 C语言数组:存放基本数据类型 OC数组:只能存放OC对象.不能存放非OC对象类型,比如int.struct.enum等 1.不可变数组的创建 void create() { /* int a = 5; int ages[10] = {1, 90, 89, 17}; // C数组 Person *p = [[Person alloc] init]; // OC数组(下面) Person *persons[5] = {p, [

iOS开发之oc(对于前面的补充1)[email protected]、循环引用

(一)@class的用处 [email protected]的作用:仅仅告诉编译器,某个名称是一个类(#import "Person.h"是要包含所有的方法声明,每次都要复制,不利于提高性能) @class Person; // 仅仅告诉编译器,Person是一个类(要实现方法还要在.m文件中包含Person头文件) 2.开发中引用一个类的规范 1> 在.h文件中用@class来声明类 2> 在.m文件中用#import来包含类的所有东西 (二)两端循环引用解决方案 第一类

iOS开发之oc(十四)--protocol协议(2)补充

(一) protocol-限制对象 1.创建一个最纯洁的对象 2.示范出如何限制 (二)protocol--协议书写位置

李洪强iOS开发之OC语言BLOCK和协议

OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么? 苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似性: (1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型为空 (2)利用block封装代

李洪强iOS开发之OC语言前期准备

OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应用程序. 拓展名:c语言-.c  OC语言.-m  兼容C++.-mm 注:其实c语言和oc甚至任何一门语言都只是我们为了实现一些功能,达到一些效果而采用的工具,抛开语法的差别外,我想最重要的应该是在解决问题的时候考虑的角度和方法不一样而已,然而这也构成了学习一门语言的重要性. 二.语法预览 (一)

iOS开发之OC面试题总结

1.简述OC中内存管理机制 OC的内存管理机制是自动引用技术,内存管理的原则是谁开辟谁释放,分为ARC和MRC,MRC的话就是需要我们程序员手动管理内存,ARC不需要我们手动管理内存,系统会自行管理. 2.readwrite,readonly,assign,retain,copy,nonatomic .atomic.strong.weak属性的作用? readWrite读写特性, 可读可写. readonly只读, 只有getter, 没有setter. assign一般用于基本数据类型和ID类