iOS知识梳理 - Objc语法中值得注意的东西

栏目: Objective-C · 发布时间: 4年前

内容简介:@property、@synthesize和@dynamicobjc推荐我们通过set/get方法访问对象的属性。很显然,为每一个属性手动添加set/get方法的声明和实现是个性价比很低的重复劳动。因此,objc提供了一些关键字帮助我们简化这一过程。这几个关键字实际上就是这么回事儿。单独做了总结:

属性声明

@property、@synthesize和@dynamic

objc推荐我们通过set/get方法访问对象的属性。很显然,为每一个属性手动添加set/get方法的声明和实现是个性价比很低的重复劳动。因此,objc提供了一些关键字帮助我们简化这一过程。这几个关键字实际上就是这么回事儿。

单独做了总结: Objective-C的@property、@synthesize和@dynamic

注释

常规的 ///* */ 就不多说了

值得一提的是 #pragma 语法,

我们可以用 #pragma mark - UITableViewDataSource 这样的写法来为代码分块,xcode将会提供导航。

参考: #pragma

enum

typedef NS_ENUM(NSUInteger, TTGState) {
    TTGStateOK = 0,
    TTGStateError,
    TTGStateUnknow
};

参考

Enum in OC

空指针

  • NULL:C的空指针 (void *)0
  • nil:objc的空对象 (id)0
  • Nil:空的类指针 (Class)0
  • NSNull:nil的包装类,为了表示dic里面的某个value为空 [NSNull null]

总结:前三个数值上是相等的,在objc中用nil比较普遍

参考 nil / Nil / NULL / NSNull

BOOL

常见的就是bool和BOOL。

bool是 c语言 的,单独的一个类型(_Bool),在数值上true = 1,false = 0

bool类型只有true和false两种状态。

另外,条件判断语句在判断时,是以0为false,非0为true进行判断的。

由此有以下结论:

2 == true //假
(bool)2 == true //真
2 //真

BOOL是ObjC定义的真假值类型,它在64位机器上等价于bool,在32位机器上是signed char

其定义如下,参考objc4-750

/// Type to represent a boolean value.

#if defined(__OBJC_BOOL_IS_BOOL)
    // Honor __OBJC_BOOL_IS_BOOL when available.
#   if __OBJC_BOOL_IS_BOOL
#       define OBJC_BOOL_IS_BOOL 1
#   else
#       define OBJC_BOOL_IS_BOOL 0
#   endif
#else
    // __OBJC_BOOL_IS_BOOL not set.
#   if TARGET_OS_OSX || TARGET_OS_IOSMAC || (TARGET_OS_IOS && !__LP64__ && !__ARM_ARCH_7K)
#      define OBJC_BOOL_IS_BOOL 0
#   else
#      define OBJC_BOOL_IS_BOOL 1
#   endif
#endif

#if OBJC_BOOL_IS_BOOL
    typedef bool BOOL;
#else
#   define OBJC_BOOL_IS_CHAR 1
    typedef signed char BOOL; 
    // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" 
    // even if -funsigned-char is used.
#endif

YES和NO

bool的表现已经讲过,这里关注一下BOOL作为signed char的表现。

这时,一个BOOL类型的变量值范围是-128~127,因此强制类型转换时可能会有异常:

BOOL boolVar = 256;
boolVar //假
boolVar == 0 //真

另外强制类型转换时也不会把值转为0和1:

(BOOL)2 == true //假

综上,使用时需注意:

  1. 使用条件表达式时不需要跟YES、NO进行比较,如 if(var == YES) 应当直接写成 if(var)
  2. 不要把其它类型强制转换成BOOL

参考:

  1. ObjC的BOOL为什么要用YES、NO而不建议用true、false?
  2. BOOL / bool / Boolean / NSCFBoolean

内存管理

TODO:后面总结梳理。


以上所述就是小编给大家介绍的《iOS知识梳理 - Objc语法中值得注意的东西》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新者

创新者

[美] 沃尔特 · 艾萨克森 / 关嘉伟、牛小婧 / 中信出版社 / 2016-6 / 88.00

讲述了计算机和互联网从无到有的发展历程,并为我们生动地刻画出数字时代的创新者群像。 在近200年的数字化进程中群星闪耀,艾萨克森从一个计算机程序的创造者、诗人拜伦之女埃达说起,细数了这一群站在科学与人文交叉路口的创新者,他们包括通用型电子计算机的创造者奠奇利、科学家冯·诺依曼、仙童半导体公司的“八叛逆”、天才图灵、英特尔的格鲁夫、微软的比尔·盖茨、苹果公司的乔布斯、谷歌的拉里·佩奇等。《创新......一起来看看 《创新者》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具