《黑马程序员》类和对象(Objective - c)

一、类和对象的概念

     OC中有两个很关键的概念就是类和对象,类和对象的关系就如同模具和用这个模具制作出的物品之间的关系。一个类为它的全部对象给出了一个统一的定义,而他的每个对象则是符合这种定义的一个实体,因此类和对象的关系就是抽象和具体的关系。

创建对象:
创建对象需要现有类,对象需表述清楚应该具备的属性和功能(行为)  格式[行为执行者  行为名称] 

创建类:

需关心三项条件:

事物名称(类名):人(Person)

属性:身高(height)、年龄(age)等

行为(功能):跑(run)、吃(eat)

 

注: 1.一般名词都是类

      2.拥有相同(或者相似)属性和行为的对象都可以抽象出来一个类

      3.类名的第一个字母必须大写

      4.不能有下划线,如果有多个英文单词组成,用驼峰标示

      5.那个行为哪个类最清楚,就把这个行为设计到那个对象里

二、类的声明与实现

  • 完整的写一个类/函数,需要两个步骤,类的声明和实现(定义)
  • 类的声明:

@interface  类名

例:

@interface  Car

{

  // 这里声明对象的属性

}

    // 这里声明一些行为(方法)

@end

  • 类的实现:

@implementation 类名

   // 这里是一些方法的实现

@end

例:

@implementation Car

 // 方法的实现

@end

代码练习(类的创建与实现):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// oc中的 NSObject声明在<Foundation/Foundation.h>中
#import <Foundation/Foundation.h>
 
// 类名:Car
// 属性:轮胎个数 wheels 、速度 speed
// 方法:跑
 
// 定义一个函数:需要函数的声明和实现
// 定义一个类: 需要类的声明和实现
 
// 类的声明
// oc关键字自比须以@开头,
// 类名开头的第一个字母必须以大写字母开头,如果有多个单词每个单词的开头必须时大写字母,要使用驼峰标示
// NSObject表示使这个类具备创建对象的能力//@interface用来声明成员变量/实例变量,和对象方法。
@interface Car: NSObject
{
    // @public可以让外部的指针间接访问成员变量
     
    @public
    int wheels;
    int speed;
 
}
 
/*
 1 oc对象方法必须以减号开头。
 2 对想方法的返回值必须用括号括住。
 3 方法的声明规则:(返回值)方法名:参数
 4 oc方法中括号只括住数据类型
 */
-(void)run;
@end
 
// 类的实现:
@implementation Car
 
// 方法的实现:说清楚声明中的方法
-(void)run
{
 
    NSLog(@"这辆车跑起来了");
}
 
@end
 
int main(int argc, const char * argv[])
{
  
    // oc中只能通过类来创建对象
    // 在oc中想要只想一些行为就先写一个[行为执行者 行为名称]
    // oc中创建的对象只能通过指针来操作
    // [Car new]每次都会创建一个新对象,并且会返回新对象本身(对象的地址)
    Car *p = [Car new];
     
    // 通过指针来访问成员变量
    // 给p指向的类的wheels属性赋值4,
    // 给p指向的类的speed属性赋值为300;
    p -> wheels = 4;
    p -> speed = 300;
     
     // 给p指向的类发送一条run消息,来调用run方法的实现。
    [p run];
       // 要访问类内部的成员变量必须使用指针来访问
    NSLog(@"轮胎个数 = %d,速度为= %d",p ->wheels,p ->speed);
     
    return 0;
}

 

●  成员变量和属性必须写在@interface 和 @end中间。

  成员变量不允许初始化 。

  成员变量不允许使用static修饰 。

   类的实现可以写在mian函数后面,但是声明必须写在main函数前面进行声明。

三、对象的内存分析

     代码练习:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#import <Foundation/Foundation.h>
 
@interface Car : NSObject
   {
       @public;
       int wheels;
       int speed;
   }
-(void)run;
@end
 
@implementation Car
 
-(void)run
{
    NSLog(@"%d个轮子,速度为%d km/h的汽车跑起来了",wheels,speed);
}
 
@end
 
 
 
int main(int argc, const char * argv[])
{
    Car *c =[Car new];
    c-> wheels = 4;
    c->speed = 250;
    [c run];
    return 0;
}

 

 

三、方法与函数的区别

 

 

方法与函数的区别:

1.对象函数都是以减号-—

2.对象函数的声明必须写在@interface之间,对象方法的实现必须写在@implemention和@end之间

3.对象方法只能由对象来调用

4.函数能写在文件中的任意位置,函数归文件所有

posted @   深海同志  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目
点击右上角即可分享
微信分享提示