服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS基础知识之@property 和 Ivar 的区别

iOS基础知识之@property 和 Ivar 的区别

2021-01-24 14:59马在路上 IOS

这篇文章主要介绍了iOS基础知识之@property 和 Ivar 的区别介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下

@property

属性其实是对成员变量的一种封装。我们先大概这样理解:

@property = Ivar + setter + getter

Ivar

Ivar可以理解为类中的一个变量,主要作用是用来保存数据的。

我们不妨来看个例子,通过下边的例子能够很清楚的解释这两个东东:

我们新建一个Person类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@interface Person : NSObject
{
NSString *name0;
}
@property(nonatomic,copy)NSString *name1;
@end
@implementation Person
- (instancetype)init {
if (self = [super init]) {
}
return self;
}
@end

在这个Person中name0就是成员变量,name1就是属性。

我们创建一个Person:

?
1
2
3
Person *p= [[Person alloc] init];
p.name1 = @"abc";
NSLog(@"%@",p.name1);

我们会发现,我在Person类外边是不能访问name0的,这说明了什么?这说明成员变量<font color=red>name0</font>只能在它自己的类的内部被访问。

因此,我们推断出,@property其实也带有接口属性,也就是能够被外部对象访问。

?
1
p.name1 = @"abc";

这行代码其实是调用了Person中name1的setter方法。

?
1
NSLog(@"%@",p.name1);

这行代码其实是调用了Person中name1的getter方法。

再说说setter和getter方法。大家应该都知道oc中有着严格的命名规范,拿这个例子来说,根据name1自动生成了

?
1
2
- (void)setName1:(NSString *)name1{}
- (NSString *)name1

注意:这里并不讨论MRC的情况,一切解释的前提都是在ARC下。

@synthesize

这个关键字用来指定成员变量

我们在Person的实现中,把代码改成这样:

?
1
2
3
4
5
6
7
8
9
@implementation Person
@synthesize name1 = _name2;
- (instancetype)init {
if (self = [super init]) {
_name2 = @"aaa";
}
return self;
}
@end

这样我们就指定了name1的成员变量为_name2了,我们在Person的初始化init方法中根本打不出_name1这个属性。

?
1
2
3
Person *p= [[Person alloc] init];
// p.name1 = @"abc";
NSLog(@"%@",p.name1);

我们注释掉赋值的那一行,可以看到打印结果为:aaa。

以上所述是小编给大家介绍的iOS基础知识之@property 和 Ivar 的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:http://www.cnblogs.com/machao/p/5764030.html

延伸 · 阅读

精彩推荐
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28