一、Objective-C基本概念
面向对象编程:OOP (Object Oriented Programing)
类似的语言:C++,Java,C#
1、类和对象
类:具有相同特征和行为的事物的抽象。
对象是类的实例,类是对象的类型。
类是模板,对象是具体表现,任何对象都要占用内存空间。
2、面向对象和面向过程的区别
面向对象以对象为中心;
面向过程以事件为中心。
3、编程过程:定义类,创建对象,使用对象
面向对象编程中,先创建出对应的类,再由类生成对象,进而完成我们的开发。
4、OC中的数据类型:
基本数据类型:int、float、double、结构体、BOOL,声明时不加*
NSInteger age = 18;
int number = 1;
float score = 98;
对象类型:使用类创建的数据类型,声明时加*
如:
C语言中使用字符串 “hello”
OC语言中使用字符串对象 @“hello”
NSString 是系统提供的字符串类,用NSString定义对象类型的变量时,必须加上*
NSString * name = @"hello";
二、类的定义
1、类的定义包含两部分:接口部分,实现部分
接口部分在.h文件中,实现部分在.m文件中。
2、接口部分
关键字标志:@interface...@end
作用:声明类的特征和行为
@interface后接 类名 : 父类名
A、声明类的特征,即声明实例变量,在@interface后的{ }中。变量中存储的是对象的数据(类似于结构体的成员变量)。
实例变量名必须以下划线开头,首字母小写,使用驼峰命名法。
B、声明类的行为:即声明方法
OC中的方法,类似于C语言的函数,是用于实现某个功能的代码段。
方法声明语法:
-/+ (返回值类型) 方法名;
方法名的声明在声明文件.h中。方法实现在实现文件.m中。
3、实现部分
关键字标志:@implementation…@end
作用:编写方法的具体实现
@implementation后接创建的类名(和@interface后接的类名一致,不是父类名)。
4、对象和方法的使用
在控制台输出
C语言中使用printf输出。
OC中使用NSLog输出,在输出内容前加@“ ”。
NSLog(@"age = %ld", age);
NSLog(@"number = %d", number);
NSLog(@"score = %.1f", score);
输出对象类型的数据使用%@。
NSLog(@"name = %@", name);
三、创建对象
创建Person类,继承于父类NSObject
Person.h文件
@interface Person : NSObject
{
@public
NSString * _name; // 姓名
NSString * _gender; // 性别
int _age; // 年龄
}
- (void) sayHi;
@end
Person.m文件
@implementation Person
- (void) sayHi
{
NSLog(@"How are you ");
}
@end
语法:类名 * 指针变量 = [ [类名 alloc] init];
main.m 文件中
1、分配内存空间
a、使用alloc方法在堆区分配Person类的内存空间,存储创建的对象。
b、分配的内存空间的数据会被自动清空,即所有的实例变量的初始值为0。
c、返回分配的内存空间的地址。指针接收地址。
[Person alloc]在堆区创建对象,定义指针p1存储对象在堆区的内存空间地址。
Person * p1 = [Person alloc];
注:
OC中使用[ ]调用方法,方法和调用的对象层级对应。
如:[类类方法] [对象实例方法]
2、初始化对象
使用实例init方法对创建的对象进行初始化。
现在init方法是一个空实现。
p1 = [p1 init];
创建对象一般采用的方式是:
Person * p1 = [ [Person alloc] init ];
在对象创建完成后,可以对实例变量进行赋值操作。
如:Person * p2 = p1;
四、使用对象
1、调用方法实现功能 [ ]
使用建立好的对象p1
Person * p1 = [ [Person alloc] init ];
[p1 sayHi];
运行即可得:How are you
2、操作实例变量 为实例变量赋值
p1->name = @”zhangsan”;
p1->gender = @’’male”;
p1->age = 18;
也可以对赋值的实例变量进行修改
p1->age = 20;
3、读取值
NSLog(@"%@ %@ %d", p1->_name,p1->_gender, p1->_age);
运行程序得到为变量赋的值。
五、实例变量有三种可见度
@public 实例变量可以在类的内部和外部操作
@protected 实例变量只能在该类和其子类内操作
@private 实例变量只能在该类的内部操作
@public 类型的实例变量的操作方法
1、类的外部 对象->实例变量
2、类的内部 在实例方法的实现部分,直接使用实例变量
声明Person类的introduce方法,在实现部分使用public实例变量
所有使用Person类创建的对象,都可以调用introduce方法
在实例方法中可以直接使用实例变量(在类的内部调用实例变量),哪个对象调用了实例方法,那么实例变量中的值属于当前调用这个方法的对象
- (void)introduce
{
NSLog(@"name: %@ gender: %@ age: %d", _name, _gender, _age);
}
六、初始化方法 init
初始化init方法,即重写init方法,为声明的类的实例变量赋初值,同时,所有创建的类的对象都默认拥有init方法为变量赋的初值。
init(初始化方法)用来初始化(赋值)声明的实例对象的初始值。
- (instancetype)init //- (id)init 类型功能类似
{
// 在实例方法中,self表示调用这个方法的对象
// self表示Person类
// 所有的学生对象在初始化之后,_age都是18
// 在初始化方法中设置的实例变量,后续是可以修改值
_age = 18;
return self;
}
七、其他
1、创建的Person类型的对象的内存地址赋值给指针p1。
指针p1指向了一个Person对象。
当一个指针指向某个对象时,可以用指针代指对象。如:Person对象p1.
2、Person * p3 = nil;//类似于NULL。对象类型的指针使用nil。
p3被称为空指针。
在OC中对空指针nil做任何操作都无效(相当于什么都没有做),对NULL做操作程序会崩溃。
3、使用@可以打印多种对象
使用%@打印对象
a、显示<类名:地址>,一般是在打印自定义类型的对象或部分系统提供的类型的对象时输出
NSLog(@"%@", p1);
得p1的地址。
b、显示字符串对象的内容
NSString * str = @"hello";
NSLog(@"%@", str);
c、显示(null) 打印了空指针
NSString * string = nil;
NSLog(@"%@", string);
下图为今年部分iOS开发的视频教程,因为不定时更新中故不做多的截图,如果有iOS开发上的问题不懂或者需要视频教程可以看我的个人简介。
不定时更新中。