黑马程序员IOS-OC语言-点语法、@property

本文介绍Objective-C中的点语法及其与set方法和get方法的关系。解释了点语法的赋值与被赋值的不同场景,并探讨了成员变量的作用域、@property与@synthesize的使用方法。此外还介绍了id作为万能指针的概念。

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

——- android培训、java培训、期待与您交流! ———-


点语法

利用点语法替换 set 方法和 get 方法,其实点语法的本质还是方法调用

格式 : 对象.成员变量名

判断 点语法语句是赋值还是被赋值后,会自动展开成相应的方法
赋值 :

对象.成员变量名 = 值;--> [对象 set成员变量名 : 值] --> set方法

被赋值:

变量 = 对象.成员变量名 --> [对象 成员变量名] --> get方法

注意:在对象方法内部用点语法调用本身会出现死循环


特殊注释

#pragma mark - 注释内容 // 会有一个分割线
#pragma mark 注释内容 // 没有分割线


成员变量的作用域

类型:

@private : 只能在当前类的对象方法中直接访问 
-
@protected : 可以在当前类以及子类的对象方法中直接访问
-
@public : 任何地方都可以直接访问
-
@package : 同一个“体系内”(框架)可以访问,介于 @private 和 @public 之间
@implementation 中默认是 @private
@interface 中默认是 @protected

补充:
1.没有 @interface,只有 @implementation也可以定义一个类,但不建议使用
2. @implementation 不能定义与 @interface 相同的成员变量


@property

用在 @interface 中,用来自动生成 seter/geter 的声明

@synthesize

用在 @implementation 中,用来自动生成 seter/geter 的实现

@synthesize 的细节

@synthesize age = _age;
1.seter和geter实现中会访问成员变量 _age
2.如果成员变量 _age 不存在,就好自动生成一个 @private 的成员变量 _age

@synthesize age;
1.seter和geter实现中文会访问成员变量 age
2.如果成员变量 _age 不存在,就好自动生成一个 @private 的成员变量 _age

手动实现
1.若手动实现了seter方法,编译器会自动生成geter方法。反之亦然
2.但是若同时手动实现了seter和geter方法,编译器就不会自动生成不存在的成员变量


更新: @property 现在兼具 @property 和 @synthesize 的功能,可以同时声明和实现seter和geter方法。默认情况下,seter和geter方法中的实现,会访问 _ 开头的成员变量

id : 万能指针

id : 可以指向任何OC对象,相当于 NSObject *

id类型的定义
    typedef struct objc_object{
        Class isa;
    } *id;

使用 : id 变量名 = [类名 new];

id 后不需要 *

——- android培训、java培训、期待与您交流! ———-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值