美文网首页人生几何?
OC基础-类 、方法(二)

OC基础-类 、方法(二)

作者: 浮华_du | 来源:发表于2021-08-26 14:35 被阅读0次

一.类

类的声明:

@interface 类名 : NSObject
{
 这类事物具有的共同的特征,将它们定义为变量
}
功能就是一个方法,将方法的声明写在这里
@end

类的实现:

@implementation 类名
将方法的实现写在这里
@end

类的对象的创建和使用

类名 *对象名 = [类名 new];

默认情况下,对象的属性是不允许被外界直接访问的,如果允许对象的属性可以被外界访问,那么就需要在声明属性的时候加上一个@public关键字。
例如:

@interface Person : NSObject
{
 @public
 NSString *_name;
 int _age;
 float _height;
}

@end

访问

对象名->属性名 = 值;
对象名->属性名;//(一般使用)
(*对象名).属性名;

完整例子

#import <Foundation/Foundation.h>
@interface Student : NSObject
{
 @public
 NSString *_name;
 int _age;
 int _Chinese;
 int _Math;
 int _English;
}
@end

@implementation Student
@end


int main(int argc, const char * argv[]) {
    
    Student *s1 = [Student new];
    s1->_name = @"旺仔";
    s1->_age = 5;
    s1->_Chinese = 90;
    s1->_Math = 80;
    s1->_English = 90;

    NSLog(@"Name:%@,Age:%d,Chinese:%d,Math:%d,English:%d",
     s1->_name,
     s1->_age,
     s1->_Chinese,
     s1->_Math,
     s1->_English
    );
    return 0;
}
//2021-07-21 10:12:46.193138+0800 TestOc[6732:66503] Name:旺仔,Age:5,Chinese:90,Math:80,English:90

二.方法 (减号-)

1.无参数方法

无参数的方法的声明:

位置:在@interface的大括号的外面
语法:

-(返回值类型)方法名称;
-(void)run;//表示声明了一个无返回值并且无参数的方法,方法的名字叫run,这个需要写在@interface的带括号外面,与@end的里面

无参数的方法的实现:

位置:在@implementation之中实现
语法:

-(返回值类型)方法名称
{
方法实现的代码;
}

@implementation Person
-(void)run
{
 NSLog(@“I’m running!”);
}
@end

无参数的方法的调用:

[对象名 方法名];
Person *p1 = [Person new];
[p1 run];

2.有参数方法(同无参),只是增加了形参

3.直接看完整例子


#import <Foundation/Foundation.h>
@interface Phone : NSObject
{
 @public
 NSString *_brand;
 NSString *_color;
 float _weight;
 NSString *_size;
}
-(void)show;
-(void)call:(int)phoneNumber;
-(void)sendMessage:(int)phoneNumber and:(NSString *)message;
@end

@implementation Phone

-(void)show
{
 NSLog(@"本机信息:%@牌 颜色:%@ 重量:%.2fg 尺寸:%@",
_brand,
_color,
_weight,
_size);
}
-(void)call:(int)phoneNumber
{
 NSLog(@"正在拨通%d的电话……",phoneNumber);
}
-(void)sendMessage:(int)phoneNumber and:(NSString *)message
{
 NSLog(@"已将短信内容:%@ 发送给%d",message,phoneNumber);
}

@end

int main(int argc, const char * argv[])
{
 @autoreleasepool
 {
 Phone *phone1 = [Phone new];
 phone1->_brand = @"Apple";
 phone1->_color = @"深空灰";
 phone1->_weight = 237.0f;
 phone1->_size = @"6.1英寸";
 
 [phone1 show];
 [phone1 call:987654321];
 [phone1 sendMessage:987654321 and:@"我晚点到!"];
 }
 return 0;
}
//2021-07-21 10:30:16.707200+0800 TestOc[8980:86732] 本机信息:Apple牌 颜色:深空灰 重量:237.00g 尺寸:6.1英寸
//2021-07-21 10:30:16.707539+0800 TestOc[8980:86732] 正在拨通987654321的电话……
//2021-07-21 10:30:16.707589+0800 TestOc[8980:86732] 已将短信内容:我晚点到! 发送给987654321

三.类方法(加号+)

声明:

+(void)sayHi;

调用:

[类名 类方法名];
注意:
  • 在类方法中不能直接访问属性。
    原因是:
    属性是在对象创建的时候,跟随着对象一起创建在对象之中。类第一次被访问的时候,会做类加载,是把类的代码存储在代码段。
    因为属性只有在对象创建的时候才会创建在对象之中,而类方法在执行的时候,有可能还没有对象,当没有对象的时候也就没有属性,所以在类方法中无法直接访问属性。
    虽然不能直接访问属性,但是我们可以在类方法中创建一个对象,这个时候就可以访问这个对象的属性了。
    同理,在类方法中也不能通过self直接访问对象方法。

相关文章

  • OC基础-类 、方法(二)

    一.类 类的声明: 类的实现: 类的对象的创建和使用 默认情况下,对象的属性是不允许被外界直接访问的,如果允许对象...

  • OC&iOS

    OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...

  • From Objective-C to Ruby(4)-类和模块

    类 定义类 OC: ruby: 初始化方法 OC: ruby: 实例变量和属性 OC: ruby: 类方法和对象方...

  • OC基础学习:类方法和对象方法的调用过程

    类方法中不能直接访问属性。 在类方法中也不能通过self直接调用当前类的其他的对象方法。 参考: OC-基础总结(一)

  • Objective-C 类与对象

    类方法 OC 中类的方法只有类的静态方法和类的实例方法 OC 中的方法只要声明在 @interface 里,就可以...

  • JSPatch原理学习

    基础原理 OC为动态语言,OC上所有的方法调用/类的生成都通过Objective-C Runtime在运行时进行,...

  • swift方法

    oc中只有类可以定义方法,swift类/结构体/枚举都能定义方法 swift的类型方法类似oc的类方法 实例方法(...

  • swift 基础方法的封装

    CTCateory swift oc 基本类用swift实现 前言 本文主要是针对swift封装基础方法类,方...

  • Lesson 0 Objective-C basic

    1.OC特性 (1)OC方法:对象方法(-),类方法(+) 1.对象方法:-(returnType)initWit...

  • OC和Swift混编遇到的一些小麻烦

    一. OC中调用swift类中的方法时,编译器有时找不到方法声明 OC调用swift类中的方法,swift类需要有...

网友评论

    本文标题:OC基础-类 、方法(二)

    本文链接:https://www.haomeiwen.com/subject/hktjmltx.html