重寫set和get方法後,為什麼使用時會發生無效?解析命名規範
阿新 • • 發佈:2019-02-07
今天博主偶然遇到如題的問題,方法寫的沒錯,都是一一對應的,但就是不呼叫set方法,百度了很多,有人說要強制寫@synthesize,還有的說@property有沒有寫,之類的,既然重寫了get,set方法,@property肯定是不會缺失的,都是一些不疼不癢的回答。
博主看了下寫出來的效果,發現並非是所有的get,set方法都無效,對比了下,終於發現問題在哪裡了,
舉例說明:
.h中宣告
/**
* 值
*/
@property(nonatomic,assign)CGFloat value;
/**
* 值為0時slider顏色
*/
@property(nonatomic,strong)UIColor *preBackgroundColor;
/**
* 進度條setter方法
*
* @param value 進度
*/
- (void)setValue:(CGFloat)value;
/**
* 設定進度條底色
*
* @param preBackgroundColor 顏色
*/
- (void)setPreBackgroundColor:(UIColor *)preBackgroundColor;
.m中實現
- (void)setValue:(CGFloat)value
{
_value = value;
_sliderBtn.center = CGPointMake(_value * _baseView.bounds.size.width , _baseView.center.y);
_lastSliderView.frame = CGRectMake(0 , 0, _sliderBtn.center.x, 20);
}
- (void)setPreBackgroundColor:(UIColor *)preBackgroundColor
{
_preBackgroundColor = preBackgroundColor;
_preSliderView.backgroundColor = _preBackgroundColor;
}
value對應setValue
preBackgroundColor對應setPreBackgroundColor
property後的屬性和set後面的命名必須一樣,而且遵循駝峰式命名,錯一個字母都不行,駝峰命名錯了也不行。
假如:preBackgroundColor對應setpreBackgroundColor(p小寫了),錯誤,無法呼叫,如果preBackgroundColor和setPreBackgroundColor中的PreBackgroundColor字母不一樣也是不行的,只有後面帶的引數是可以一樣或者不一樣的。
所以在重寫set和get方法時一定要注意,小寫錯一個字母,大小寫出錯都不能成功呼叫。
想要檢視具體使用的請看下篇部落格,封裝slider