iOS开发(一)——Object-c语言基础(3、类与对象)

3.类、对象与方法

3.1 类

3.1.1 类的定义

 
  在Objective-C中,每个类的定义包括两个部分:接口(interface)和实现(implementation)。接口部分定义在.h文件中,包含类的声明、属性以及方法,主要作用是对外提供访问接口。实现部分在.m文件中,主要用于方法的功能实现。

1.类定义简介
 
   类定义是一种类型的对象的原型,其声明了每个对象都具有的属性(property),同时还定一个同一类的所有对象都使用的一系列方法(method)。
  编译器为每个类创建一个可访问的对象,称为类的对象,类方法负责创建属于该类的新对象。创建对象的过程叫做实例化。
  当使用Xcode创建一个类时,Xcode会自动创建.m和.h文件。
  
2.接口文件
 
  接口文件完成类的声明,向外界提供如何使用该类,主要体现在以下3类信息。

  • 继承关系:通过继承关系可以了解该类是哪个类的子类,从而可以了解可供调用的父类的方法和属性
  • 属性Property
  • 方法Method

   接口部分的定义以@interface开始,以@end结束。在iOS开发中,属性和方法的命名一般采用驼峰法命名规则。

3.实现文件
 
  类的实现部分已@implementation开始,以@end结束。在类的实现部分,需要使用#import命令引用类的接口部分。

3.1.2 类的继承

 
  继承是面向对象编程的重要特性之一,类定义是累加的,每一个定义的类都是基于其父类,并且可以继承父类中定义的属性和方法。注意:NSObject类是所有类的父类。
在Objective-C中创建的类也遵循继承的原则:

  • 继承父类的属性
  • 继承父类的方法

3.2 属性

   属性定义后,会创建一个与该属性名称同名且带下划线的实例变量,自动合成该属性对应实例变量的getter和setter方法。

3.2.1 属性的定义

1. 属性中的一些概念

  • 属性(property):通常指的是由对象封装或者存储的数据。
  • 存取方法(getter/setter):获取/设置该类的对象的属性值,执行设置/获取操作的方法称为存取方法
  • getter方法:返回属性的值,名称与属性名相同,懒加载就是getter方法的重写。
  • setter方法:设定属性的值。

2. 属性的声明
   当在类中声明一个属性时,需要在类的@interface代码部分编写,格式如下:

@property (attributes) type name;

其中:

  • attributes 属性的特性,常见的关键字由weak、strong、assign、copy、atomic/nonatomic。
  • type 属性的类型说明 如:NSString、NSNumber等等
  • name 属性的名称

3. 懒加载

   在开发过程中,经常会使用属性的懒加载。就是当需要获取某个属性的值时,再对该属性对象的实例变量进行初始化,从而提高内存的使用效率。例如使用懒加载初始化name属性。

-(NSString*) name{
 	if(_name == nil){
 	_name = [NSString stringWithFormat:@"www.baidu.com"];
 	}
 	return _name;
 }

3.2.2 公有属性与私有属性

   在自定义类中,既可以在.h文件中声明属性,也可以在.m文件中声明属性。在.h文件中声明的属性可以供外部调用,称为公共属性。在.m文件中声明的属性,只能在该类的实现部分使用,称为专有属性,只能在该类内部调用。

3.2.3 属性关键字

   属性的特性决定了属性在原子性、存取方法以及内存管理3个方面的特性。目前,常用的特性关键字有8个,分别为nonatomic、atomic、readonly、readwrite、strong、weak、assign、copy。

1.原子性(atomic、nonatomic)

(1)atomic (默认):atomic意为操作是原子的,意味着只有一个线程访问实例变量。

  • 当一个变量声明为atomic时,意味着在多线程中只能有一个线程能对他进行访问。该变量为线程安全型,但是会影响访问速度。在非ARC编译环境下,需要设置访问锁来保证对该变量进行正确的getter/setter。

(2)nonatomic(常用):nonatomic与atomic刚好相反,表示非原子的,可以被多个线程访问。它的效率比atomic快,但不能保证在多线程环境下的安全性。

  • 当一个变量声明为nonatomic时,意味着多个线程可以同时对其进行访问。它是非线程安全型,访问速度快。当两个不同的线程对其访问时,容易失控。

2.存取方法(readonly、readwrite)

  • readonly:表示只有getter没有setter,即只能读取,不能更新或写入。
  • readwrite(默认):表示该属性同时具有setter和getter,即该属性可以读也可以写。

3. 内存管理(strong、weak、assign、copy)

  • strong(ARC中为默认选项):强引用,表示实例变量对传入的对象要有所有权关系,引用计数加1.
  • weak:弱引用,在setter方法中,对传入的对象不进行引用计数加1的操作。
  • assign :简单赋值,不更改索引计数,适用简单数据类型。
  • copy:copy与strong类似,但区别在于实例变量是对传入对象的副本拥有所有权,而非对象本身。

4.速记法

  • strong:自定义对象,控制器对象使用strong。
  • weak:代理对象。
  • assign:基本数据类型,如:int、float、double等
  • copy:NSString、NSArray、NSDictionary及其可变子类、Block块代码。

3.3 方法

3.3.1 方法的定义

   在iOS中,通过将一则消息(message)发送给一个对象(接收者),可以调用该对象的一个方法,消息机制是Object-C的一个特点。方法分为实例方法类方法
  在OBject-C语言中,调用某个对象中定义的方法是通过向对象发送消息的方式进行,消息的名称对应类中定义的方法名称。调用一个对象的方法采用如下形式进行:

[receiver message];
  • 消息message:这里的消息指的是方法名(选择器Selector)和参数。
  • 接收者receiver:通常未一个对象,消息告诉接收者需要去做什么事情。

方法的定义
方法的声明包含了以下几个部分:方法类型标示符、返回类型、方法名称、参数类型和参数名称。

-(void)insertString:(NSString *)aString atIndex:(NSUInterger)loc;

方法分为实例方法:以"-“开头,消息的接收者必须为一个已经实例化的对象。类方法:以”+"开头,也称为工厂方法,类方法通常用于创建类的新实例,类方法的返回值通常未instancetype。

3.3.2 方法的重写与调用

   调用采用消息机制即可。
  当子类需要重写父类的方法时,必须保证重写的两个方法返回值、方法名、参数列表完全一致
  子类调用父类方法采用[super 方法]。

3.4 对象

3.4.1创建对象

   对象是类Class运行时的实例,它包含了自己的实例变量的内存副本以及类方法的指针,在实际开发中采用分配内存地址alloc以及初始化init两个步骤来创建一个对象。
  对象的创建分为两个阶段:内存空间分配和初始化。


1. 分配内存空间alloc

2. 初始化init

3.5 变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值