Objective-C语法基础

  • 新建一个XCode项目
    在这里插入图片描述
  • 新建一个类

在这里插入图片描述

1、成员变量、属性

1.1、类内使用成员变量,类外使用属性

Role.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Role : NSObject
{
    //成员变量:只能类内使用
    NSString *_name;
    int _age;
}


//属性:类外可使用
//属性就是内部成员变量的外部接口
@property (nonatomic, strong) NSString *name;

//属性也相当于 get/set 方法
-(void)setAge:(int)age;
-(int)getAge;

-(void)display;

@end

NS_ASSUME_NONNULL_END

Role.m

#import "Role.h"

@implementation Role


//绑定属性和成员变量
//推荐使用成原变量与属性不同命的方式,成员变量前面加_,属性不加
@synthesize name = _name;


//构造方法
- (instancetype)init
{
    self = [super init];
    if (self) {
        //类内调用的都是成员变量
        _name = @"";
        _age = 0;
    }
    return self;
}



-(void)setAge:(int)age{
    _age = age;
}

-(int)getAge{
    return _age;
}


-(void)display{
    NSLog(@"角色名称: %@    角色年龄: %d", _name, _age);
}


@end

main.m

#import <Foundation/Foundation.h>
#import "Role.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        
        //实例化对象(* 代表指针)
        //[类名 方法名]
        //[对象名 方法名]
        //alloc:为对象分配内存空间
        //init:初始化操
        Role *r1 = [[Role alloc]init];
        [r1 display]; //角色名称:     角色年龄: 0
        
        
        [r1 setName:@"琦玉"];
        [r1 setAge:20];
        [r1 display];  //角色名称: 琦玉    角色年龄: 20
        
        //属性可以直接当做get/set用
        r1.name = @"杰诺斯";
        NSLog(@"角色名称: %@", r1.name);  //角色名称: 杰诺斯
    }
    return 0;
}

1.2、补充

Role2.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Role2 : NSObject

//新版本中只需声明 属性,便会自动生成 对应的成员变量(如属性 name,便会自动生成成员变量 _name)
@property (nonatomic, strong) NSString *name;
@property () int age;


-(void)display;


-(void)setSex:(NSString *)sex;
-(NSString *)getSex;

@end

NS_ASSUME_NONNULL_END

Role2.m

#import "Role2.h"

@implementation Role2

//新版xCode可以在 .m 文件中声明成员变量
{
    NSString *_sex;
}

- (instancetype)init
{
    self = [super init];
    if (self) {
        _name = @"";
        _age = 0;
        _sex = @"";
    }
    return self;
}

-(void)display{
    NSLog(@"角色名称: %@    角色年龄: %d    角色性别: %@", _name, _age, _sex);
}

-(void)setSex:(NSString *)sex{
    _sex = sex;
}

-(NSString*)getSex{
    return _sex;
}

@end

main.m

#import <Foundation/Foundation.h>
#import "Role2.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
    
        Role2 *r2 = [[Role2 alloc]init];
        r2.name = @"地狱吹雪";
        r2.age = 26;
        [r2 setSex:@"女"];
        [r2 display];  //角色名称: 地狱吹雪    角色年龄: 26    角色性别: 女
    }
    return 0;
}

2、方法

2.1、对象方法、类方法

Role3.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Role3 : NSObject



// - 代表对象方法,用对象名调用
-(void)setName:(NSString*)name;
-(NSString*)getName;
-(void)objectFun:(NSString*)name andCom:(NSString*)company;
-(void)objectReport;
// + 代表类方法,用类名调用
+(void)setCompany:(NSString*)company;
+(NSString*)getCompany;
+(void)classFun:(NSString*)name andCom:(NSString*)company;
+(void)classReport;



//初始化方法,重写init
//对于初始化方法,id和instancetype没有区别
//对于其他方法,填id可能会导致类型错误
//instancetype代表当前类的类型,当前类型是 Role3,那么instancetype就是Role3类型
-(instancetype)init;
//id可以代表任意类型,无需指定特定类型
-(id)init2;

//自定义构造方法
-(id)initWithName:(NSString*)name andCompany:(NSString*)company;

@end

NS_ASSUME_NONNULL_END

Role3.m

#import "Role3.h"

@implementation Role3

{
    NSString *_name;
}


//静态变量
static NSString *_company;


-(void)setName:(NSString *)name{
    _name = name;
}


-(NSString*)getName{
    return _name;
}

-(void)objectFun:(NSString *)name andCom:(NSString *)company{
    //对象方法中,可以使用成员变量、静态变量
    _name = name;
    _company = company;
}


-(void)objectReport{
    NSLog(@"对象方法objectReport--- 角色名称:%@   角色公司: %@", _name, _company);
    //对象方法中调类方法,防止循环调用,暂时注释掉
//    [Role3 classReport];
}


+(void)setCompany:(NSString *)company{
    _company = company;
}

+(NSString*)getCompany{
    return _company;
}


+(void)classFun:(NSString *)name andCom:(NSString *)company{
    //类方法中只能调用静态变量
    _company = company;
}


+(void)classReport{
    NSLog(@"类方法classReport --- 角色公司: %@", _company);
    //类方法中调对象方法,防止循环调用,暂时注释掉
//    [[Role3 alloc]objectReport];
}


-(instancetype)init{
    self = [super init];
    if (self) {
        _name = @"name";
        _company = @"company";
    }
    return self;
}


-(id)init2{
    self = [super init];
    if (self) {
        _name = @"name2";
        _company = @"company2";
    }
    return self;
}


-(id)initWithName:(NSString *)name andCompany:(NSString *)company{
    self = [super init];
    if (self) {
        _name = name;
        _company = company;
    }
    return self;
}

@end

main.m

#import <Foundation/Foundation.h>
#import "Role3.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
    
        Role3 *r31 = [[Role3 alloc]init];
        [r31 objectReport];  //对象方法objectReport--- 角色名称:name   角色公司: company
        Role3 *r32 = [[Role3 alloc]init2];
        [r32 objectReport];  //对象方法objectReport--- 角色名称:name2   角色公司: company2
        Role3 *r33 = [[Role3 alloc]initWithName:@"战栗龙卷" andCompany:@"英雄协会"];
        [r33 objectReport];  //对象方法objectReport--- 角色名称:战栗龙卷   角色公司: 英雄协会
        
        [r33 objectFun:@"饿狼" andCom:@"怪人协会"];
        [r33 objectReport];  //对象方法objectReport--- 角色名称:饿狼   角色公司: 怪人协会
        
        
        [Role3 classReport];  //类方法classReport --- 角色公司: 怪人协会
        [Role3 classFun:@"邦古" andCom:@"英雄协会"];
        [Role3 classReport];  //类方法classReport --- 角色公司: 英雄协会
        [r33 objectReport];  //对象方法objectReport--- 角色名称:饿狼   角色公司: 英雄协会
        
    }
    return 0;
}

2.2、补充:访问修饰复符

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface MyClass : NSObject
{
    //成员变量访问修饰复符
    //@public,类内类外均可使用
    //@private,类内可用,类外不可用,不可继承
    //@protected,默认为受保护的,类内可用,类外不可用,可继承
    //@package,框架权限,在框架内相当于受保护,在框架外相当于私有(常用于写三方库)
    
    @public
    int _classInt;
    
    
}

//属性实质上是set和get方法,而不是把成员变量便为公有
@property(nonatomic,strong)NSString *className;

//方法没有访问修饰符
- (void)report;

@end

NS_ASSUME_NONNULL_END

3、继承、多态

  • 多态:方法重写,方法重载(函数名相同,参数不同)
  • OC中不支持方法重载

Animal.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Animal : NSObject

{
    @protected
    NSString* _category;
}
@property (nonatomic, strong) NSString* category;


-(instancetype)initWithCategory:(NSString*)category;


-(void) howl;


@end

NS_ASSUME_NONNULL_END

Animal.m

#import "Animal.h"

@implementation Animal

@synthesize category = _category;

-(instancetype)initWithCategory:(NSString *)category{
    self = [super init];
    if (self) {
        _category = @"动物";
    }
    return self;
}


-(void)howl{
    NSLog(@"我是%@, 我会叫", _category);
}

@end

Dog.h

#import "Animal.h"

NS_ASSUME_NONNULL_BEGIN

@interface Dog : Animal

@end

NS_ASSUME_NONNULL_END

Dog.m

#import "Dog.h"

@implementation Dog


//方法重写
-(instancetype)initWithCategory:(NSString *)category{
    self = [super init];
    if (self) {
        _category = category;
    }
    return self;
}


//方法重写
- (void)howl{
    NSLog(@"我是%@, 汪汪汪", _category);
}

@end

main.m

#import <Foundation/Foundation.h>
//Dog.h 中已经引用了Animal.h,所以此处可以不写Animal.h的引用
#import "Dog.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
      
        Animal *animal = [[Animal alloc]initWithCategory:@"动物"];
        [animal howl];  //我是动物, 我会叫
        Dog *dog = [[Dog alloc]initWithCategory:@"狗"];
        [dog howl];  //我是狗, 汪汪汪
        
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/763307.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GOM引擎源码 完整可编译 带微端 附带基础附件

GOM引擎源码 完整可编译 带微端 附带基础附件 时间紧迫&#xff0c;无暇顾及&#xff0c;无意中得到即公布GameOfMir源码未测试&#xff0c;专业人事自行编译测试&#xff01;非诚勿扰&#xff01;源码下载&#xff1a;极速云

招生报名系统教培招生小程序

招生报名系统&#xff1a;轻松实现教培招生新高度 &#x1f680; 招生报名系统&#xff0c;开启智慧教育新时代 在当今数字化快速发展的时代&#xff0c;教育行业也迎来了变革的浪潮。招生报名系统作为这一变革的先锋&#xff0c;为教育机构提供了全新的招生渠道和管理方式。通…

Spring Boot集成DeepLearning4j实现图片数字识别

1.什么是DeepLearning4j&#xff1f; DeepLearning4J&#xff08;DL4J&#xff09;是一套基于Java语言的神经网络工具包&#xff0c;可以构建、定型和部署神经网络。DL4J与Hadoop和Spark集成&#xff0c;支持分布式CPU和GPU&#xff0c;为商业环境&#xff08;而非研究工具目的…

【前端CSS3】一篇搞懂各类常用选择器(黑马程序员)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;2.1 基础选择器2.1.1 标签选择器2.1.2 类选择器2.1.3 id选择器2.1.4 通配符选择题2.1.5 类选择器与id选择器区别☀️☀️☀️2.1.6 基础选择器总结&#x1f680; 2.2 复合类选择器2.2.1 后代选择…

Python | Leetcode Python题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; class Solution:def hammingWeight(self, n: int) -> int:ret 0while n:n & n - 1ret 1return ret

Unity 功能 之 创建 【Unity Package】 Manager 自己自定义管理的包的简单整理

Unity 功能 之 创建 【Unity Package】 Manager 自己自定义管理的包的简单整理 一、简单介绍 Unity Package 是一种模块化的资源管理和分发方式&#xff0c;用于将游戏开发所需的代码、资源、配置文件等内容打包成一个独立的、可重用的组件。Unity Package 可以在多个项目之间…

【RabbitMQ问题踩坑】RabbitMQ设置手动ack后,消息队列有多条消息,只能消费一条,就不继续消费了,这是为什么 ?

现象&#xff1a;我发送5条消息到MQ队列中&#xff0c;同时&#xff0c;我在yml中设置的是需要在代码中手动确认&#xff0c;但是我把代码中的手动ack给关闭了&#xff0c;会出现什么情况&#xff1f; yml中配置&#xff0c;配置需要在代码中手动去确认消费者消费消息成功&…

Tomcat部署与优化

Tomcat部署与优化 Tomcat简述 server&#xff1a; 服务器&#xff0c;Tomcat运行的进程实例&#xff0c;一个Server中可以有多个service&#xff0c;但通常就一个 service&#xff1a;服务&#xff0c;用来组织Engine&#xff08;引擎&#xff09;和Connector&#xff08;连接…

黑鹰优化算法(BEO)-2024年SCI新算法-公式原理详解与性能测评 Matlab代码免费获取

目录 原理简介 一、种群初始化 二、围捕行为 三、悬停行为 四、捕捉行为 五、抢夺行为 六、警告行为 七、迁徙行为 八、求偶行为 九、孵化行为 性能测评 参考文献 完整代码 黑鹰优化算法(Black eagle optimizer, BEO)是一种新型的元启发式算法&#xff08;智能优化…

微信小程序的运行机制与更新机制

1. 小程序运行机制 1.1. 冷启动与热启动 冷启动为用户第一次打开小程序时&#xff0c;因为之前没有打开过&#xff0c;这是第一种冷启动的情兑。第二种情况为虽然之前用户打开过&#xff0c;但是小程序被用户主动的销毁过&#xff0c;这种情况下我们再次打开小程序&#xff0…

PADS设置板框提示不闭合的解决办法

一般是选中join&#xff0c;提示不闭合&#xff0c;不能转成板框&#xff0c;其实直接点击close就好了&#xff0c;报错提示里就有提示&#xff0c;让用close命令试试

FT232串口win11打不开,重新安装驱动问题解决。

问题现象&#xff1a;FT232 WIN11打不开&#xff0c;串口识别正在被占用。更改串口号问题无法解决。 解决办法&#xff1a; 卸载驱动&#xff0c; 重启电脑&#xff0c; 去官网下驱动安装问题解决。Drivers - FTDI

卡尔曼滤波公式推导笔记

视频见B站上DR_CAN的卡尔曼滤波器 【卡尔曼滤波器】3_卡尔曼增益超详细数学推导 &#xff5e;全网最完整_哔哩哔哩_bilibili

虚拟机网络配置(静态网络)

解决问题&#xff1a;VMware中创建centOS虚拟机后使用ifconfig没有ip地址&#xff0c;但我想在主机&#xff08;Windows&#xff09;系统下使用shell连接虚拟机从而方便后续交互。 VMware中编辑->虚拟网络编辑器 &#xff08;注意需要管理员身份不然会无法修改&#xff09;…

一篇文章学会【node.js安装以及Vue-Cli脚手架搭建】

一.为什么搭建Vue-Cli (1).传统的前端项目结构&#xff1a; 一个项目中有许多html文件&#xff0c;每一个html文件都是相互独立的&#xff0c; 如果需要在页面中导入一些外部依赖的组件&#xff0c;就需要在每一个html文件中都需要导入&#xff0c;非常麻烦 (2).现在的前端…

老挝-海外媒体发稿:媒体宣发超给力,打造完美产业链

引言 老挝新闻网&#xff08;laosnews&#xff09;通过海外媒体发稿的方式&#xff0c;取得了显著的成就。借助媒体宣发的力量&#xff0c;老挝成功打造了一个完美的产业链&#xff0c;进一步推动了本国经济的发展。本文将探讨老挝-海外媒体发稿的优势以及产业链的构建和发展。…

HarmonyOS开发探索:使用Snapshot Insight分析ArkTS内存问题

识别内存问题 当怀疑应用存在内存问题的时候&#xff0c;首先使用DevEco Profiler的Allocation Insight来度量内存在问题场景下的大小变化以及整体趋势&#xff0c;初步定界问题出现的位置&#xff08;Native Heap/ArkTS Heap/dev等&#xff09;。 在初步识别内存问题出现的位置…

MySQL架构和性能优化

文章目录 一、MySQL架构架构图存储引擎MyISAM引擎特点InnoDB引擎特点管理存储引擎 二、性能优化索引索引管理EXPLAIN 工具使用profile工具 监控 一、MySQL架构 架构图 存储引擎 MySQL提供了多种存储引擎供用户选择&#xff0c;每种存储引擎都有自己的特点和使用场景。 InnoDB…

算法刷题之路之链表初探(二)Leecode21合并两个有序链表

算法刷题之路之链表初探&#xff08;二&#xff09; 今天来学习的算法题是leecode141环形链表&#xff0c;是一道简单的入门题&#xff0c;话不多说&#xff01;直接上&#xff01; 条件&#xff08;Leecode21&#xff09; 重点&#xff01;&#xff01;&#xff01; 我直接把…

primetime中cell和net的OCV

文章目录 前言一、Cell OCV1. POCV coefficient file2. POCV Slew-Load Table in Liberty Variation Format&#xff08;LVF lib&#xff09; 二、Net OCV三、如何check OCV是否已加上&#xff1f;总结 前言 在生产中&#xff0c;外界环境的各种变化&#xff0c;比如PVT&#…