这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战
前言
ios中什么是属性变量、什么是成员变量?什么是实例变量?
他们之间有什么联系?
具体的使用方法是什么?
什么情况下需要用属性变量?又是什么情况下用成员变量?
什么是成员变量和实例变量
- 成员变量是在{}中声明的变量
- 如果成员变量的类型是一个类则称这个变量为实例变量
- 成员变量包括实例变量,所以可以通称为成员变量(原来你俩是一伙的)
- 比如在
.h
头文件的{}
中定义的
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Persion : NSObject{
NSString *name; //实例变量
int age;//成员变量
}
@end
NS_ASSUME_NONNULL_END
其中name
是实例变量,age
是成员变量
- 比如在
.m
文件中的{}
中定义的
#import "Persion.h"
@interface Persion ()
{
NSString *gender;//实例变量
int height;//成员变量
}
@end
@implementation Persion
@end
其中gender
是实例变量,height
是成员变量
什么是属性变量
通常我们使用@property
声明的变量都叫做属性变量
-
比如在
.h
头文件中这样定义#import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface Persion : NSObject @property (nonatomic, copy) NSString *info;//属性变量 @end NS_ASSUME_NONNULL_END
其中
info
变量就是属性变量 -
比如在
.m
文件中这样定义#import "Persion.h" @interface Persion () @property (nonatomic, copy) NSString *hobby;//属性变量 @end
其中
hobby
变量就是属性变量
他们之间有什么联系
说:你们之间什么关系,到底谁勾引谁。。。
【手动狗头】。哈哈
扒掉衣服仔细观察他们还是有些联系的
-
当我们创建一个属性变量时,系统会自动创建一个与之对应的成员变量
比如以下代码:
#import "Persion.h" @interface Persion () @property (nonatomic, copy) NSString *hobby;//属性变量 @end @implementation Persion - (instancetype)init { if (self = [super init]) { self->_hobby = @"爱美女";//使用成员变量赋值 } return self; }
可以看到,当我们创建一个属性变量
hobby
后,就可以直接使用成员变量_hobby
进行赋值,可见系统已经创建了对应的成员变量
成员变量具体使用方法
创建
上面也说了,在{}
中创建的变量才是成员变量
- 比如在
.h
头文件的{}
中定义的
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Persion : NSObject{
NSString *name; //实例变量
int age;//成员变量
}
@end
NS_ASSUME_NONNULL_END
其中name
是实例变量,age
是成员变量
- 比如在
.m
文件中的{}
中定义的
#import "Persion.h"
@interface Persion ()
{
NSString *gender;//实例变量
int height;//成员变量
}
@end
@implementation Persion
@end
其中gender
是实例变量,height
是成员变量
-
上面四个成员变量,不论是在.m还是在.h中创建的都无法在外部其他类进行访问访问就会报错:
提示Instance variable 'name' is protected
, 用我蹩脚的英文翻译了下,就是说”实例变量‘name’受保护”,没错,是受到保护,因为:
成员变量创建后默认是
@protected
类型,就是受保护的,外接无法访问
-
@private、@protected、@public
@protected 受保护的,只能在本类或子类中访问,默认类型
@private 私有的,只能在本类中访问
@public 公开的,可以在外部进行访问
我们将上面的例子改造下,将
name
改为@public
类型:@interface Persion : NSObject { @public NSString *name; //实例变量 int age;//成员变量 } @end
可以看到在main中就可以正常访问了。
注意,.m文件中的成员变量即使加
@public
也没用,外部也访问不了
使用
成员变量的赋值和取值只能通过->
符号
属性变量具体使用方法
创建
属性变量创建需要使用@property
-
比如在
.h
头文件中这样定义#import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface Persion : NSObject @property (nonatomic, copy) NSString *info;//属性变量 @end NS_ASSUME_NONNULL_END
其中
info
变量就是属性变量 -
比如在
.m
文件中这样定义#import "Persion.h" @interface Persion () @property (nonatomic, copy) NSString *hobby;//属性变量 @end
其中
hobby
变量就是属性变量 -
属性变量系统会自动创建对应的getter/setter方法
使用
因为有创建的getter setter 方法,则可以直接使用点语法来使用属性变量
-
在.m 中创建的属性变量只能在类内部使用,外部无法使用
番外
#以上是小弟的一些学习总结,不正之处各位老铁请多多指正~~~
今天的文章iOS 中的属性变量、成员变量、实例变量分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/14105.html