子类属性和父类私有属性同名问题

本文探讨了在Objective-C中父类与子类同名属性的访问机制,特别是在私有属性和self访问时的不同行为,以及getter和setter方法在继承中的作用。

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

父类有一个私有属性 NSString *searchText;
子类也有一个属性 NSString *searchText;
父类有这么一个方法:

- (void)searchRequestWithText:(NSString *)searchText {
    _searchText = searchText;
    [self requestData];
}

而requestData方法中 调用了self.searchText
此时的self.searchText是没有被赋值的
调试可以看到 里面有两个变量
调试信息

子类调用父类的方法的时候
如果父类使用的是_searchText 这样的方法
获取到的不是子类的对应属性的值,而是父类里的对应属性的值
而如果是self.searchText 获取到的是子类里对应属性的值
原理是self. 调用了对应的getter setter方法,这个方法是可以被子类覆盖的

所以以后写代码两种写法要尽量统一(不过如果需要重写setter方法 有些地方肯定要用到self.的 父类重写的getter setter方法也会被子类覆盖 即使是私有属性 使用的时候需要注意)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值