[关闭]
@chinese-ppmt 2017-12-18T09:48:38.000000Z 字数 1048 阅读 2192

iOS'Special之_cmd@()

iOS'Special


直到今天(2017-12-18)我才明白iOS开发中_cmd@()。惭愧,又高兴!

☞ _cmd

_cmdObjective-C的方法中表示当前方法的selector,正如同self表示当前方法调用的对象实例一样。

_cmd在开发中的实用

🌰例:UIControl添加Category防止btn重复点击。

btn点击时间间隔.png

_cmd在runtime的objc_getAssociatedObject当做key参数,简直是完美。原因看雷纯锋个人很佩服他的答案:
雷纯锋荐.png

☞ @()

我的解释把非OC对象(必须非OC对象的)包装成OC对象(NSNumber类型)

实例证明如下:

@()只能是非OC对象类型.png
注意看XCode的错误提示:Illegal type 'NSString *' used in a boxed expression.


@()代表转成NSNumber类型.png
注意看XCode的黄色警告提示:Incompatible pointer types initializing 'NSString *' with an expression of type 'NSNumber'

@()在开发中的实用

🌰例: 某商品从服务器获取价格为@"435.5",用户提交订单时选择快递,快递费已知是20元,用程序计算总价,并显示出来(要求:435.5显示435.5,435.50显示435.5,435.56显示435.56,435.566显示435.57)。

之前的代码

  1. NSString *priceStr = @"435.5";
  2. CGFloat priceFloat = [priceStr floatValue];
  3. CGFloat newPriceFloat = priceFloat + 20;
  4. NSString *newPriceStrFormat = [NSString stringWithFormat:@"%f",newPriceFloat];
  5. //打印结果:455.500000
  6. //下面的自己联想去,😜
  7. if(){
  8. //......
  9. }else{
  10. //......
  11. }

现在的代码

修改上面的newPriceStrFormatnewPriceStrValue

  1. NSString *newPriceStrValue = [@(newPriceFloat) stringValue];
  2. //打印结果:455.5

示例截图说明.png

总结:处理价格(NSString * 与 float相互转换)的小数点,可优先考虑@().

㊟ 参考链接:

  1. 说说 Objective-C 里的 @()
  2. IOS _cmd
  3. Objective-C Associated Objects 的实现原理 很值得一读
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注