Objective-C学习笔记(十七)——成员变量和属性详解

来源:互联网 发布:学校宿舍网络设计 编辑:程序博客网 时间:2024/05/02 01:46

       上一篇博客简单讲解了OC中的成员变量的概念,说到成员变量,就不得不提属性。我们按照代码片段来讲解。

《代码一》:

(1)在People.h中声明一个成员变量*_peopleName,以及该成员变量对应的属性:*peopleName, 一般成员变量最好加下划线,属性不加下划线。People.h 的代码如下:

#import <Foundation/Foundation.h>@interface People : NSObject{    NSString *_peopleName;}@property(nonatomic,strong)NSString *peopleName;//属性;@end

(2)在People.m文件中,进行成员变量和属性的绑定,可以把属性理解为成员变量对外的接口,外界对属性的操作,可以理解为对成员变量的操作。注意一些关键字的使用:

#import "People.h"@implementation People@synthesize peopleName=_peopleName;-(instancetype)init{    self  = [super init];    if (self) {        //类内调用成员变量而不是属性,属性是给类外调用的;        _peopleName=@"Jack";//默认会生成成员变量;    }    return self;}@end

(3)在main.m文件中,实例化People类的对象,并使用该对象操作类中的属性。main.m代码如下:

#import <Foundation/Foundation.h>#import "People.h"int main(int argc, const char * argv[]) {    @autoreleasepool {                People *people = [[People alloc]init];        NSLog(@"%@",people.peopleName);//这里调用的是属性;    }    return 0;}

(4)最后的输出结果如下,成功取出成员变量中的值。


《代码二》:

(1)其实在现在高版本的的OC中,并不需要手动创建成员变量,只要创建属性,系统会自动创建该属性的成员变量,我们来实现一下:

其中People.h的代码如下:

#import <Foundation/Foundation.h>@interface People : NSObject@property(nonatomic,strong)NSString *peopleName;//属性;注意我们这里没有声明成员变量;@end

(2)在People.m中,不需要绑定,这里对可以对_peopleName赋值,也可以不赋值;

#import "People.h"@implementation People//这里也不需要使用@synthesize关键字进行成员变量和属性的绑定;//@synthesize peopleName=_peopleName;-(instancetype)init{    self  = [super init];    if (self) {        //类内调用成员变量而不是属性,属性是给类外调用的;        //这里还是会有加下划线的变量,表示系统默认生成;        _peopleName=@"Jack";//默认会生成成员变量;    }    return self;}@end

(3)main.m的代码如下,这里可以对属性进行操作:

#import <Foundation/Foundation.h>#import "People.h"int main(int argc, const char * argv[]) {    @autoreleasepool {                People *people = [[People alloc]init];        people.peopleName=@"Bob";//赋值        NSLog(@"%@",people.peopleName);//这里调用的是属性;    }    return 0;}

(4)输出结果如下:


      总结,我们需要搞清楚的是成员变量和属性的作用范围。成员变量在类内起作用,属性可以在类内,类外起作用。


github主页:https://github.com/chenyufeng1991  。欢迎大家访问!

1 0