【黑马程序员】-我的OC学习笔记(3)-存取器方法和构造方法重写

基于拟蒙特卡洛模拟法的随机潮流计算matlab程序 由式(4-11)可知,蒙特卡洛模拟法的计算量不受电力系统规模大小影响,因此该方法在一些复杂的电力系统中可以得到应用,包括处理电力系统中有多个间歇性新能源接入的问题,解决系统中多个节点之间相关性问题等等。本章在此基础上提出了基于拟蒙特卡洛模拟的随机潮流计算方法,并且对拟蒙特卡洛法中的拟随机数序列进行了改进,大大提高了随机潮流的计算效率。模拟法的具体思路如下:基于实际工程问题的求解需要,建立与之相对应的随机模拟过程和随机概率模型,使得它们的参数,包括概率分布或者数学期望,能够等于问题的实际解; 阅读详情

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

OC中有一类方法称之为存取器方法,也就是我们常说的存取器set和get方法,其主要是用来进行类中实例变量的访问和赋值。

  一、OC中传统的get和set方法

@interface Person : NSObject
{
	int _age;
	NSString *_name;
}
-(void)setAge:(int)age;
-(void)setName:(NSString *)name;
-(int)age;
-(NSString *)name;
@end

     如上述代码所示,创建一个Person类,其有两个实例变量age和name。我们手动为其编写get和set方法,通过手动的get和set方法,我们能够访问age和name也可以为age和name赋值。传统的get和set方法的书写规则如下:

1、get方法以减号开头,返回类型为实例变量的类型,方法名为实例变量去除下划线的名字;

2、set方法以减号开头,返回类型为void,方法名为set后加实例变量名去除下划线并大写首字母;

3、get方法一定有返回值,set方法其后一定要有参数,且参数类型与实例变量类型想同,形参名为实例变量名去除下划线。

二、@property和@synthesize关键字

在OC中提供了一种快速实现存取器方法的编译指令,就是@property和@synthesize方法,通过这两条编译器指令我们可以不用像传统的写法那样写多个get、set方法。会由系统默认生成get和set方法。如下代码所示:

//Person.h
#import <Foundation/Foundation.h>

@interface Person
{
	int _age;
	NSString *_name;
}
@property int age;
@property NSString *name;
@end

//Person.m
#import "Person.h"
 
@implementation Person
@synthesize age;
@synthesize name;
@end;
  我们重写了上述的Peron类,并使用了@property和@synthesize指令,这时系统会在编译时为我们自动生成之前我们手动书写的传统get和set方法。@property指令的书写规则为:@property 实例变量类型 去掉set的方法名,如上例所示@property int age;指令相当于声明如下两个方法:-(void) setAge:(int) age和-(int)age方法,注意只是声明并没有实现。而且@property指令必须书写在@interface 和@end之间,并且当有多个实例变量的类型一致时可以将同类型的写在一个@property指令之后。我们在实现文件中可以使用@synthesize指令来生成对应的get和set方法的具体实现,@synthesize指令的语法是:@synthesize 去掉set的方法名。如上例所示:@synthesize age指令将会对-(void) setAge:(int) age和-(int)age方法进行具体的实现,但千万注意的是这里的这两个方法的具体实现是如下所示的代码:

-(void)age
{
	return age;
}

-(int)setAge:(int)age
{
	self->age = age;
}
其具体实现并不是我们所料想的对_age和_name进行设值和取值,而是@synthesize方法会生成两个新的实例变量age和name。并且新实例变量age和name是私有的,并且不能被子类继承和访问,如果我们想用这种语法进行对_age和_name的存取,则我们可以使用@synthesize为指定实例变量赋值的语法,例如:@synthesize age = _age,

@synthesize name = _name,这样存取器方法就会对_age和_name进行处理。

三、增强的@property

XCode4.4版本之后对@property指令进行了增强,在增强版本的@property指令中我们不需要在类的实现文件中使用@synthesize指令就可以生成类的get和set方法。例如我们再重写上述的Person类。

//Person.h
#import <Foundation/Foundation.h>

@interface Person
{
	int _age;
	NSString *_name;
}
@property int age;
@property NSString *name;
@end

//Person.m
#import "Person.h"

@implementation Person
@end;
此时我们不需要使用@synthesize方法也会生成完整的get和set方法,并且我们可以省略对于实例变量_age和_name的声明书写,因为@property会自动为我们生成对于_age和_name的声明。对于当前指令,我们可以在实现文件中重写get和set方法但是注意的是我们不能同时重写这两个方法,而只能重写两者中的一个。

四、构造器方法重写

OC中我们在初始化一个变量对象时会使用类似与如下的一条语句,比如我们定义一个Person *p = [Person new];其实这句话相当于如下两句话:Person *p = [Person alloc];[p init];这两句话分别为p对象分配了内存空间和进行了初始化,init方法我们一般就称为构造器方法。默认的构造器方法继承自NSObject类,但默认的构造器方法所能提供的功能有限,因此我们可以选择自己重写构造器方法。重写构造器方法的语法如下:

-(id)init
{
	if (self = [super init])
	{
		/.....初始化代码....*/
	}

	return self;
}
构造方法重写的语法就如上述所示,构造器方法是一个对象方法,所以以减号开头,其后跟init方法名,在方法体内首先执行if (self = [super init])命令,super指令将会执行当前类的父类的方法。这句话是为了检测父类的初始化是否成功并且分配了内存,否则我们可能会丢失父类的初始化信息。随后我们才编写自己的初始化策略,当初始化赋值完成后,我们需要返回当前对象self,self是OC中的一个特殊的标识符,其代表当前对象。例如我们可以重写Person类的构造器方法,让对象在new之后初始姓名为小明,年龄为:0。

//Person.m
#import "Person.h"

@implementation Person
-(id)init
{
	if (self = [super init])
	{
		_age = 0;
		_name = @"小明";
	}

	return self;
}
@end;
除了对系统默认的构造方法的重写,我们也可以自定义构造方法,自定义构造方法一般满足如下几点要求:

(1)一定是对象方法,以减号开头;

(2)返回值一般是id类型;

(3)方法名一般以initWith开头;

比如我们自定义Person类的构造方法,使其在执行初始化时就可以指定参数name和age,代码如下:

//Person.h
#import <Foundation/Foundation.h>

@interface Person
{
	int _age;
	NSString *_name;
}
@property int age;
@property NSString *name;
-(id)initWithName: (NSString *name) name andAge: (int) age;
@end

//Person.m
#import "Person.h"

@implementation Person
-(id)initWithName: (NSString *name) name andAge: (int) age
{
	if (self = [super init])
	{
		_name = name;
		_age = age;
	}

	return self;
}
@end;
所以当我们在创建一个Person类时可以按如下形式进行书写,Person *p = [[Person alloc] initWithName:@"小红" andAge: 18];,这样我们就完成了在创建时指定参数进行初始化。










PMP–一、二、三模–分类–13.干系人管理 A:确认是否已制定沟通管理计划,使业务干系人认识到项目的成功之处。B:让业务干系人参加冲刺回顾会议。C:与发起人和关键干系人一起确定产品待办事项列表中的优先要务,以便交付商业利益。D:为关键干系人开展收尾调研。C。 阅读详情

相关推荐

蓝牙6.0的‘新雷达’:Channel Sounding信道探测,真能比UWB更香吗?

本文探讨了蓝牙6.0的Channel Sounding信道探测技术在室内定位领域的应用潜力。通过与UWB技术的对比分析,揭示了其在成本、功耗和兼容性方面的优势,特别是在智能门锁、物品追踪等场景中的商业价值。Channel Sounding技术不仅具备亚米级精度,还能通过现有蓝牙设备实现零边际成本部署,为物联网应用提供了新的解决方案。

weixin_29288313的博客 332

TypeScript -- 存取器(set,get)

TypeScript语法请看TypeScript中文网 这里我们主要是看一下存取器,也就是get,set方法。 在C#中,我们使用存取器的方法是 public int m_Life = 0; public int Life { get { return m_Life; } set...

阳仔博客 4万+

IAR编译相同工程生产hex文件checksum不一致问题

IAR Checksum

xqw19891201的博客 1383

Java 反射 - Java 访问器

作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com) 使用 Java 反射你可以在运行期检查一个方法的信息以及在运行期调用这个方法,使用这个功能同样可以获取指定类的 getters 和 setters,你不能直接寻找 getters 和 setters,你需要检查一个类所有的方法来判断哪个方法是 getters 和 setters。 首先让我们来规定一下 ge...

liyongshun82的博客 2227

IEEE GRSL投稿全流程避坑指南:从Latex模板到校样缴费,新手必看的7个关键节点

本文详细解析了IEEE GRSL投稿全流程中的7个关键节点,从LaTeX模板选择到校样缴费,帮助新手避免常见陷阱。特别针对图像格式转换、审稿意见回复、版权转移等环节提供实用技巧,确保投稿过程高效顺利。

weixin_28720573的博客 570

ESP32-CAM图像糊成马赛克?OV2640参数调优保姆级教程(亮度/对比度/饱和度)

本文提供了一份详细的ESP32-CAM图像调优教程,针对OV2640摄像头常见的图像模糊问题,从分辨率设置、亮度/对比度/饱和度调整到高级寄存器配置,帮助用户优化网页显示画质。通过代码示例和实用技巧,解决马赛克、色彩暗淡等问题,提升摄像头性能。

weixin_30410119的博客 594

存取器方法、属性声明

setter getter 方法-(void)setWidth:(double)aWidth; -(double) width; -(void)setHeight:(double)aHeight; -(double) height; //[rectangle setWidth:10]; //NSLog(@“%g”,[rectangle width]; rectangle.width = 10; N

qq_37506789的博客 508

【时空数据分析#06】实战:基于Python与ArcGIS的NDVI长期趋势制图与分级

本文详细介绍了基于Python与ArcGIS进行NDVI长期趋势制图与分级分析的完整工作流。通过整合MODIS卫星数据,利用ArcGIS进行空间处理与栅格转换,结合Python进行时序统计与趋势计算,最终生成直观的植被变化趋势分级图,为生态评估与环境监测提供可靠的空间分析工具。

lilh34434的博客 474

Java基础 : 更改器方法、访问器方法和构造器方法

首先我们从字面可以理解一下 更改器就是会改变原来的数据; 访问器只是会查看数据; 而构造器就是创建。 下面我们通过代码示例理解一下: 我们创建一个 Computer类,定义了两个属性cpuname和db。 由于这两个属性用private修饰,在其他类是不能访问的。 但是我们又希望可以其他类可以访问或者是控制其他类可以访问和更改部分属性值,这时我们就用到更改器方法和访问器方法(set()和get()...

鄙人kunzhi96,感恩遇见! 1万+

图神经网络实战(25)——基于A3T-GCN预测交通流量

本节重点讨论了使用 TGNN 进行交通预测任务。首先,我们介绍了 PeMS-M 数据集,并将其从表格数据转换为具有时间信号的静态图数据集。在实践中,我们根据输入距离矩阵创建了加权邻接矩阵,并将交通速度转换为时间序列。最后,我们构建了 A3T-GCN 模型,这是一个专为交通预测设计的 T-GNN 模型,并将结果与两个基线模型进行了比较,验证了模型的预测结果。

盼小辉丶的博客 8571

MTK Camera HAL 与 FeaturePipe 架构解析:从硬件抽象到功能管线的工程落地路径

MTK 的 Camera 系统在 Android 平台下采用高度模块化的 HAL 与 FeaturePipe 架构组合,分别承担着底层硬件抽象与上层功能封装的职责。通过将 ISP、3A 算法、Sensor 驱动与图像处理节点解耦封装于功能链条中,联发科平台实现了灵活可控的影像能力调度机制。本文将基于真实项目实践,系统解析 MTK Camera HAL 与 FeaturePipe 架构的设计思路、核心模块与运行机制,结合 AE/AWB/AF 控制流、Buffer 管理策略、功能管线构建方法与多线程调度实现方式

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1571

java访问器_Java中的访问器方法

所以我对“setter”和“getter”方法有疑问,以及它们是否有用.假设我只是写了一个非常基本的程序,如下所示:public class Account{String name;String address;double balance;}然后,假设我编写另一个使用此“帐户”类的类,如下所示:class UseAccount{public static void main(String[] a...

weixin_29171129的博客 1311

3D点云-CVPR 2020-PF-Net: Point Fractal Network for 3D Point Cloud Completion

是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像素点与原来像素点比较完成模型的训练。而PF-Net就是采用GAN的思想在3D点云上的应用。

404 Not Found 2369

黑马程序员——OC代码规范和编程风格

代码写的不够漂亮工整符合规范?大家的代码风格过于迥异阅读困难? 内功深厚的武林高手出招往往平淡无奇。同理,编程高手也不会用奇门怪招写程序。良好的编程风格是产生高质量程序的前提。 参考资料:IOS Developer Library对建议的代码规范的说明 ,这里也有翻译成中文版本的。 类(Class)命名原则 就拿“NSMutableArray”来说 NS --- 前缀(P...

weixin_34168700的博客 116

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

黑马程序员--OC-关键字

------http://write.blog.youkuaiyun.com/postedit">Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------                                               第八讲- OC关键字 01-关键字@public,@private,@protected     1.@public:在

wk1170758545的专栏 459

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

黑马程序员------OC基础-----关键字

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- NO.1: 关键字“NS”       NSObject*anObject; (类名*对象名)--OC语言中NS(NeXTSTEP)为现任苹果CEO,之前NeXTSTEP老板的乔布斯团队的用户界面工具包,并一直沿用至今。由于OC中所有对象的操作都是由指针来完成,所以我们可以见到代码中大部分都

Bo的专栏 389

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

存取器方法 get 和 set

通过set(存)和get(取)关键字定义函数,成为一种易用的编程接口,允许类用户访问属性一样的函数,保持了信息的隐藏和封装原则。 actonscript中用get方法后,其方法只可以访问,不可以修改。如: var n:Number = 99; function get score():Number { return n; }trac...

weixin_34409357的博客 282

Java对象数据存取的3种方式

1.用公有方式做对象数据存取: 优点:访问数据方便;  缺点:数据很不安全 . public class Student {   public String name;   public int age; } public class TestClass { public static void main(String[] args) { //公有方式下:对象可以任意

我是一只IT小小鸟 1501

存取器方法

前段时间,由于工作的原因,没有时间学习C#.现在好了,工作不太忙了.可以继续学习了,哈哈!不过以前学习都忘记的差不多了,现在还得重新学起了. 存取器方法:就是get和set语句组成的方法.他们可以在私有成员中提取值和赋值.这个方法让用户可以对私有变量进行操作. 在C#中的存取器方法.比java中提取值和赋值方便多了. 设计类时的—个好的目标总是不仅仅隐藏类成员的实现,而且禁止任何对类字段...

weixin_30257433的博客 335

OC——合成存取器

一、在接口声明中使用@property指令来标识属性,属性通常是实例变量。 二、在实现部分使用@synthesize指令告诉编译器为已经定义的@propertyn属性自动生成一对设置函数和获取函数,生成的函数不出出在代码中。 使用点运算符去访问。 @property可在添加参数。 (1)、基本数据类型一般用assign  ,这是缺省默认的。assign(分配,指派)          @p

cym_bj 1071

java编写访问器方法一个问题

    最近在看《java核心技术》(卷1),在这里做一个随笔吧。import java.util.Date; class Employee { private Date hireDay; public Date getHireDay() { return this.hireDay; } } public class Exp001 { public static void...

韦海涛的博客 2388

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 167

安卓IOS打包证书

.p12 、 .mobileprovision 、 keystore 相关证书申请

weixin_58431406的博客 282

React Native项目开发(iOS侧为例)

本文基于React Native 0.71+,通过npx react-native init初始化项目后,详细讲解如何使用TypeScript搭建两个页面:入口页(Entrance.tsx)和我的页面(Profile.tsx)。重点介绍了配置tsconfig.json、初始化TypeScript环境、集成React Navigation实现页面跳转,并通过创建共享类型文件(navigation.ts)实现路由类型安全。文章还涵盖依赖安装、iOS构建问题排查、目录结构规范及常见错误解决方案。

D_xw_的博客 253

[iOS]Runtime2

为了让你在父类中依然能访问当前对象(也就是子类的实例),编译器在底层会生成一个结构体,叫 : 当调用 时,底层调用的函数是 : 拿着(也就是当前的子类对象)作为消息接收者,但是把方法查找的起点定位在了 (父类)这里需要注意的就是仍然是调用者自己,即先讲一下上篇没讲过的,我们如果缓存未命中,那我们就会进入慢速查找,现在我们来详细的讲解在进入慢速查找的瞬间会再看一遍方法列表,然后立刻调用加锁,因为多线程下别人正在动态添加方法或者扩容,不加锁会崩溃类就绪OC的机制就是在编译期只生成了 结构,当类首次被发送消息时(

wzm20070304的博客 237

VS Code + KXApp 开发 iOS 报错排查指南,工程、签名、真机、补全、配置

在 VS Code 里用 KXApp 开发 iOS,报错常不在代码而在环境。本文按失败阶段分五类排查:工程没出现 Xcode 视图(查 .xcodeproj 与 xcode-select)、构建失败(No profiles、Team 签名、CocoaPods 用 .xcworkspace)、真机调试失败(信任、开发者模式、设备未准备好)、没补全或 No such module(等索引、清 clangd 冲突)、设置保存不了(装 xcodeproj gem),每类给现象、日志通道和修法。

2501_91590906的博客 175
上一篇: 【黑马程序员】-我的OC学习笔记(2)-封装、继承、多态
Little__Coder
博客等级 码龄11年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值