OC基础总结

1.NSLog的使用:Foundation用于日志输出的函数

%@  输出对象的占位符,当它输出的对象的时候会调用对象description方法

%C  Unicode字符

%c  ASCII码

2.面向对象思想

1、相对于面向过程

面向过程:强调的步骤,以动词打头的

面向对象:强调完成这个事情,所需的对象

2、面向对象的好处

1、这种思维方式更加接近现实生活

2、提高代码灵活性,和可扩展性

3、提高代码的可维护性

对象:

在软件设计阶段:对象就是现实生活中一个个事物

类的产出: 类就是提取对象共性

1、这些对象共有的状态特征-》属性

2、这些对象的行为特征-》 方法

3、确定类与类之间关系

编码角度:必须有类才能创建对象

类是汽车图纸

对象一个个的汽车实体

类的设计:

类就是提取对象共性

1、这些对象共有的状态特征-》属性

2、这些对象的行为特征 -》 方法

一个包含三个要素

1、类名:就是这一类事物的名称

2、属性:这些对象共有的状态特征

3、方法:这些对象的行为特征

一个软件的开发:

产品经理

需求分析:这个软件需要做什么,不需要做什么

软件设计:设计出来这个软件中包含哪些类

项目经理

分配任务,监督程序员,处理程序员开发中遇到问题

编码:编码

3.类的定义:

一类包含两个部分 @interface 与 @end 之间

类的声明

0、确定父类:在类名称后通过 : 来指定自己的父类

1、声明属性

2、声明方法

类的实现:实现声明中方法 @[email protected] 之间

3.1 定义的格式

3.2 属性(成员变量)

@interface与@end 之间 的 大括号中

3.2.1 成员变量权限控制修饰符

@private :私有的,只能在本类中访问

@protected受保护的(默认),只能在本类和子类中访问

@public :公共的,可以所有的类中访问

@package:框架中,在框架内部相应与@protected在框架外部,相当于@private(了解)

3.2.2 属性封装

封装属性的方法就是为每一个属性提供setter和getter方法

setter方法:

1、必须是对象方法

2、必须没有返回值

3、必须set +成员名称去掉_首字母大写

4、必须要一个参数,并且参数类与成员变量的类型一致

getter方法

1、必须是对象方法

2、返回值类必须与成员变量的类型一致

3、名称必须是成员变量的名称去掉_

4、必须是空参

[email protected]

@property 自动生成setter与getter方法的声明和实现,还会生成一个私有成员变量

格式:@property(是否是原子属性,权限)  属性类型 属性名称;

是否是原子属性

atomic:原子,默认,在setter方法会给属性加锁

nonatomic:非原子,不会在setter方法给属性加锁,它的访问速度快

权限

readwrite:可读可写(默认),生成getter和getter方法

readonly :只读,只生成getter方法

如何自定义setter方法

我们自己写一个setter方法,@property会帮我生成getter方法和私有成员变量

如何自定义getter方法

我们自己写一个getter方法,@property会帮我生成setter方法和私有成员变量

如果我们自定义了getter和setter方法,@property不会帮我们私有成员变量,需要自己写

3.2.4 点语法

点语法就是setter与getter方法调用的简写形式

如果.在等号的左边表示调用setter方法

如果.在等号的右边或没有等号表示调用getter方法

3.3 方法

3.3.1 对象方法

1、在声明和定义时候以-开头

2、对象方法是隶属于对象的,只能对象调用

3、对象方法中可以直接访问成员变量

4、对象方法中可以通过self来调用其他成员方法,也可以通过self使用点语法来访问属性

5、对象方法中可以调用类方法,但是调用类方法的时候需通过类名,不通过self调用

3.3.2 类方法

1、在声明和定义时候以+开头

2、 类方法是隶属于类的,只能类对象或类名称调用

3、 类方法中不可以直接访问成员变量

4、 类方法中不可以通过self来调用其他成员方法,可以通过形参和创建一个对象的方式,来访问这个对象的对象方法

5、 类方法中可以调用类方法

3.3.3 self关键字

1、self用在对象方法中,表示调用这个方法的那个实例对象

2、self如果在类方法中,表示类对象

3、无论self在什么样的方法中,谁调用这个方法,self就是谁

3.3.4 super

1、调用父类的方法

重写:在子类中实现父类中同名的方法

使用场景:1、如果我们重写父类,还想使用父类中该方法的功能这时候就使用supper来调用父类这个方法

2、在我们自定义init方法时候,首先要调用父类的init方法

3.3.5description方法

1、description对象方法:当我们通过NSLog输出一个实例对象的时候会调用对象上这个方法

2、description类方法,当我们通过NSLog输出一个类对象的时候会调用类对象上这个方法

3.3.6 初始化方法

1、NSObject默认实现一个init方法,什么都没有干,仅仅是把自己地址给返回了

2、什么时候需要重写父类init方法:当我们每次创建对象的时候,都给对象中属性提供同样的默认值的时候,就可以重写父类init方法

3、如何重写父类init方法

1、首先是对象方法

2、返回值类必须是instancetype或id类型

3、方法名称必须是init

4、方法内部必须先调用父类的初始化方法

5、判断父类是否初始化成功

6、如果父类初始化成功了才可以初始化自己的成员变量

7、必须返回指向字节的指针

4、如何自定义初始方法

0、必须提供方法声明和实现

1、首先是对象方法

2、返回值类必须是instancetype或id类型

3、方法名称必须是initWith开头

4、方法内部必须先调用父类的初始化方法

5、判断父类是否初始化成功

6、如果父类初始化成功了才可以初始化自己的成员变量

7、必须返回指向字节的指针

4.对象的创建

1、通过类new方法创建

1、给实例对象在堆中开辟存储空间

2、把所有成员变量初始化为0

3、返回指向该对象指针

2、通过 [[类名 alloc] init];

3、通过工厂方法(快捷的构造方法)

5.对象与函数\方法

1、对象只可作为方法或函数的形参

2、当对象在方法传递是地址传递

3、对象可以作为方法的返回值

4、对象可以作为方法或函数参数在其中进行连续的传递

5、方法或函数内部可以调用对象上的方法和访问对象上其有权限访问的属性

6.对象与对象之间的常见关系

6.1依赖关系:当A类的一个对象作为B的方法形参或局部变量的时候,B依赖与A

6.2关联关系: 就是hasA关系,B类中有一个成员变量是A类的实例对象,B拥有一个A,BhasA A;

7.面向对象的三大特征

7.1[抽象]:类是对象抽象,父类子类抽象

7.2 封装:

功能封装:就是把同一类功能封装到一个类中供外界访问

数据的封装:类可以一个事物的所有状态特征封装成属性

属性封装:给每一个属性提供getter和setter方法

当我们把东西都封装起来后,外界调用的时候,就无需关系你内部的做的,是用起来就比较方便

7.3 继承:A 类继承 B类,那么A类就拥有了B类中所有成员变量和方法

注意点:

1、子类中不可以有与类同名成员变量,哪怕这个成员变量在父类中私有的也不可以

2、OC单继承

3、OC多层继承

优点:代码复用

缺点:高耦合

OC中的基类是NSObject

7.4 多态:同一指针指向不同的对象的时候,表现出来不同的形态

1、必须有继承

2、子类必须重写父类方法

3、必须是父类指针指向子类对象

优点:简化代码

提高代码的灵活性

8.其他关键字

#include:C语言提供预编译指令,它把所包含的文件内容拷贝过来

#import:它功能与#include一样,但它可避免重复包含

在OC中只能#import导入头文件,不能导入实现文件

#import "" 导入自己写的头文件

#import <> 导入系统或框架中头文件

@class:作用防止循环导入

告诉编译器它后面这个东西是个类,它不知道这个类中有什么东西(属性,方法)

@class 都用在头文件中

nil:如果一个类中有成员变量是对象类型的,那么它在初始化的就被初始化为nil

在OC中可以给nil发送任何消息,都不会报错,当你给nil发送消息的时候,它什么都不做

在OC中通过nil来清空指针

9.Foundation中数据类型

BOOL:逻辑类型,只有真和假两个值

YES 为真

NO  为假

BOOL 可以定义变量

可以作为形参

可以作为返回值类型

NSObject * 对象类型

静态的数据类型:

优点:编译时的检查

代码提示准确

id:动态类型

优点: 在没有继承的时候,可以使用多态的特性

缺点:不会进行编译时的检查,如果你调用它所指向的对象上不存在的方法就再运行时报错

代码提示不准确

10. NSString类简介

1、创建

1、通过字面量方式

NSString *str1 = @"小黑"

2、通过初始化方法

//   把C语言的字符转换为OC字符串

NSString *str2= [[NSString alloc] initWithUTF8String:"C字符串"];

3、通过类方法

NSString*str3  [NSString stringWithFormat:@"格式化字符串",参数]

2、计算长度

[str length] :计算字符串中有几个字符

时间: 2024-07-29 01:18:20

OC基础总结的相关文章

四.OC基础--1.文档安装和方法重载,2.self和super&amp;static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&amp;私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

OC基础 可变字典与不可变字典的使用

OC基础 可变字典与不可变字典的使用 1.不可变字典 1.1创建不可变字典 //创建字典 //注意: //1,元素个数是偶数 //2,每两个元素是一个键值对 //3,值在前,键在后 NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"huang",@"name",@"30",@"age", nil]; NSLog(@"%@",

OC基础(23)

NSArray基本概念 NSArray 遍历 NSArray排序 NSArray文件读写 NSArray 与字符串 *: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: 30p

黑马程序员--oc基础第六篇

六. oc基础知识(内存管理下) 总结:内存管理代码规范 1.只要调用alloc那么就必须调用release: 2.set方法的代码部分 *基本数据类型直接赋值. *如果是oc对象类型 - (void) setCar:(Car *)car { if(_car!=car) { [_car release]; _car=[Car retain]; } } 3.dealloc 部分的代码规范 *一定要[super dealloc ]放在最后面. *对self(当前)所拥有的其他对象做一次release

iOS开发OC基础:OC基础概念总结,OC面向对象的思想

一.什么是OOP: OOP(Object Oriented Programming):面向对象编程 二.面向对象和面向过程的区别: 面向过程编程:分析解决问题的步骤,实现函数,依次使用面向对象编程:分解问题组成的对象,协调对象间的联系和通信,解决问题. 面向过程是以事件为中心,关心的是完成这个事件的详细步骤:面向对象是以事物为中心,关心的是事物应该具备的功能,而完成一个事件只是事物所有功能里面的一个小功能(以过程为中心,以对象为中心) 三.类和对象 对象定义了解决问题的步骤中的行为,不刻意完成一

iOS开发OC基础:OC属性的一些概念和基本使用

一.属性简介 //属性是OC2.0之后新出的一种语法,能让我们快速的生成setter以及getter方法,大大简化代码 二.如何定义一个属性 //@property 属性关键字,用来定义属性 //NSString * 属性的类型 //name 属性的名字. //@property 只是生成的setter以及getter方法的声明.@property NSString *name; 三.属性的使用注意事项//如果在.m文件中我们自己实现了setter以及getter方法,则编译器就不会再帮我们生成

iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握. expression:表达式assignable:赋值variable:变量redefinition:重复定义type:类型conflicting:冲突项invalid:无效的conversion:转换specifier:说明符indent:缩进operands:运算对象.操作数binary:二

iOS开发OC基础:OC的内存管理

OC内存管理的基础知识 /** //             *  当对一个对象autorelease时,会将该对象放到离它最近的自动释放池,当自动释放池将要销毁时,会对自动释放池中的对象发送release消息,让对象的引用计数减1,(切记,是将对象的引用计数减1,而不是回收空间.) //             */ /** *  如果相对一个对象做copy操作,就必须让该类服从NSCopying协议,并且实现协议中的- (id)copyWithZone:(NSZone *)zone方法 */

iOS开发OC基础:OC中的分类(类目)

//分类,category,(类目) //为没有源代码的类添加方法 //一定要注意,只能添加方法,不能添加实例变量 /** *  分类 类的定义也是分为接口部分和实现部分 接口部分:以@interface开头 + 类名 后跟小括号,小括号内填写的是分类名 @end结束 在@interface 与@end 之间添加方法. */ //分类为原类添加的方法,就相当于原类具有该方法,可以正常调用 因为涉及到几个分类的创建,所以就直接上传代码了,其实代码也不多,只是怕大家在建立分类的时候会混淆,所以直接把

iOS开发OC基础:延展Extension

//延展Extension,是为类扩充私有的方法,以及私有的实例变量,和分类Category相比,延展定义的方法是私有的,而且还可以定义实例变量(私有的). //@interface 开头 + 类名(哪一个类的延展) + 小括号,小括号内填写的是延展名,一般情况下都省略. @end结束 (写在.m文件里) main函数中的完整代码为: #import <Foundation/Foundation.h> #import "Person.h" int main(int argc