_cards实例变量最开始是0,因为所有objective-C中的所有实例变量都从0开始,包括指针
也就是说它没有指向任何东西,没有数组
[self.cards addObject:card];程序不会崩溃,但也不会做任何事情,因为你可以将信息传给nil
在堆中分配一个数组,并指向它
- (NSMutableArray *)cards
{
if(!_cards) _cards = [[NSMutableArray alloc]init];
return _cards;
}
在堆中分配空间,并赋值给实例变量,alloc分配内存,init初始化内存,让它成为一个合理的数组
惰性实例化,就是我们惰性地等到最后一秒再实例化
arcRandom() mod取余
方括号[ ]是数组访问的标准语法 self.cards[index] = [self.cards objectAtIndex:index];
objectAtIndexSubScript
%[self.cards count] 如果为0的话,会产生错误,注意这一点
数组是空数组的话,则下标0处没有对象,会产生数组下标越界错误
初始化你想得到的默认值,然后设置,然后返回,如果不幸失败的话,它会返回合适的默认值,这是一种编程风格
只是在局部使用时,不要使用NSNumber,NSNumber通常是为了将其传递给方法
Unicode对这四种花色都有相应字符
NSUinteger 对于iPhone5s来说是64位无符号整型
%@ 代表一个对象 [NSString stringWithFormat:@"%d%@", self.rank, self.suit];
NSArray *rankString = @[@"?", @"A", @"2", ..., @"J", @"Q", @"K"];
return [rankString[self.rank] stringByAppendingString:self.suit];
我们这门课中碰到的字符串都是字符串对象,而不是 const char*
@的作用是让字符串成为字符串对象
当同时实现setter和getter时,@synthesize
简洁性和易理解性,比性能重要10倍
+方法是一个类方法,这意味着你将它发送给类,而不是实例对象self
适用于两类,一是创建东西
调用方法[类名 类方法]
instancetype 将会返回一个消息发送对象一样的类型 return self;
调用父类初始化器对self赋值 self = [super init];
一般我们会检验父类的init返回,确保它能被初始化,因为任何初始化器无法初始化自身的时候,它会返回nil,这让所有人知道,你的任意子类,或任何人尝试分配和初始化你,你无法创建一个结构良好的对象。这将确保我的父类在我调用init时,如果无法初始化自身,我就不用尝试初始化自己
init没有参数,也可以有参数
5240

被折叠的 条评论
为什么被折叠?



