Objective-C的成员变量、属性与带下划线属性的总结

本文总结了Objective-C中的成员变量和属性的区别,讲解了带下划线的成员变量访问方式。Xcode推荐使用下划线前缀的变量名,并介绍属性如何自动创建对应的getter和setter方法。属性与成员变量的关系,以及在类内部的访问规则也进行了阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

成员变量与属性是不同的,先看如下示例代码:

User.h文件

#import <Foundation/Foundation.h>

@interface User : NSObject{
    // 成员变量
    NSString *name;
    NSInteger age;//typedef long NSInteger;
}
// 属性
@property(nonatomic,copy)NSString* address;
@property(nonatomic,assign)CGFloat height;

- (void)obtainInfo;

@end

User.m文件

#import "User.h"
@implementation User{
    NSString *info;
}

@synthesize address = _address;
//@synthesize height;

- (void)obtainInfo{
    NSLog(@"name = %@",self->name);
    NSLog(@"age = %ld",(long)age);
    NSLog(@"address = %@",self.address);
    NSLog(@"height = %f",self.height);
    NSLog(@"info = %@",info);
}

@end

其中,定义成员变量格式(放在大括号中)为:

@interface User:Object{
....
}

或者:

@impletation User{
...
}

而属性则使用@property(和@synthesize)定义的。

Xcode推荐的书写成员变量的形式是在变量名前添加下划线_,例如:_name。成员变量只能通过->符号来访问。

对于属性,使用@property定义后,系统会自动生成settergetter方法。

可以这样说,一个属性对应着一个成员变量;如果属性只使用@property声明,而没使用@synthesize的话,系统会自动的给你声明一个_开头的实例变量。如果又使用@synthesize的话,则相当于声明了一个实例变量,如果@synthesize address = _address;,变量名为_address;如果@synthesize address ;,变量名为address

在类的内部该如何访问成员变量和属性呢?

如果,成员变量可以直接通过变量名访问,或者self->...来访问;对于属性,如果没有定义@property,则必须要用self.属性名来访问。本质上,属性和成员变量处于一致的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值