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

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

内容简介:@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语法中值得注意的东西》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

The Sovereign Individual

The Sovereign Individual

James Dale Davidson、William Rees-Mogg / Free Press / 1999-08-26 / USD 16.00

Two renowned investment advisors and authors of the bestseller The Great Reckoning bring to light both currents of disaster and the potential for prosperity and renewal in the face of radical changes ......一起来看看 《The Sovereign Individual》 这本书的介绍吧!

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

各进制数互转换器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具