Objective-C基础知识之(一):类、对象、创建对象、对象操作

一、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开发上的问题不懂或者需要视频教程可以看我的个人简介。

不定时更新中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容