@property (strong,nonatomic)NSMutableArray *cards;
@end
@implementation Deck
-(NSMutableArray *)cards
{
if (!_cards){_cards=[[NSMutableArray alloc]init];
}
return _cards;
}
惰性初始化 惰性初始能提高内存使用效率
-(void)addCard:(Card *)card atTop:(BOOL)atTop
{
if (atTop) {
[self.cards insertObject:card atIndex:0];
}else
{
[self.cards addObject:card];
}
}
[self.cards insertObject:card atIndex:0] insertObject ... atIndex.. 是在可变数组中插入一个对象,放在下标为 “atIndex:。。”的地方 消息的接受者NSMutableArray,传入参数为元素(id) 和 NSUIntege,没有返回对象;
[self.cards addObject:card]; addObject: 在可变数组后增加一个对象,(位置是在数组的末尾) 消息接受者NSMutableArray,传入参数:元素(id),没有返回对象
-(Card *)drawRandomCard
{
Card * rondomCard =nil;
if ([self.cards count]) {
unsigned index=arc4random() %[self.cards count];
rondomCard=self.cards[index];
[self.cards removeObjectAtIndex:index];
}
return rondomCard ;
}
[self.cards count] 求数组元素个数 消息接受对象是NSArray和子类对象 返回对象为number,没有传入参数
a=arc4random()%x 求x范围类随机一个整数前提是x不能为0 函数
[self.cards removeObjectAtIndex:index]; removeObjectAtIndex:number 剔除可变数组中下标为number的元素。 传入参数为USUInteger 消息的接受者为NSMutableArray,没有返回对象
-(NSString *)conetens
{
NSArray *rankStrings= [PlayingCard rankString];
return [rankStrings[self.rank] stringByAppendingString:self.suit];
}
[rankStrings[self.rank] stringByAppendingString:self.suit]; stringByAppendingString 是两个字符串合并成一个新的字符串 返回为NSString 接受对象为NSString 传入参数为NSString;
-(void)setSuit:(NSString *)suit
{
if ([[PlayingCard validSuits] containsObject:suit]) {
_suit=suit;
}
}
[[PlayingCard validSuits] containsObject:suit] containsObject 检查对象是否包含在数组中 消息接受者为NSArray 传入参数为id 返回为 BOOL
-(NSString *)suit
{
return _suit ? _suit:@"?";
}
_suit ? _suit:@"?"就等于
if(_suit){
_suit}else
{@"?"}
@implementation PlayingCardDeck
-(instancetype)init
{
self =[super init];
if (self) {
for (NSString *suit in [PlayingCard validSuits]) {
for (NSUInteger rank=1; rank<=[PlayingCard maxRank]; rank++) {
PlayingCard *card =[[PlayingCard alloc]init];
card.rank =rank;
card.suit =suit;
[self addCard:card];
}
}
}
return self;
}
@end
instancetype 表示的是返回和消息的接受者为同一类型;
super 关键字是直接实现超类中的方法;
-(instancetype)init
{
self =[super init];
if (self) {....}
return self;
}是标准的重载的init方法模板,这个方法首先会调用父类的初始化方法。执行父类的初始化方法,使得继承的实例变量能正常初始化,必须将父类init方法的执行结果赋值给self,因为初始化过程改变了对象在内存中的位置(意味着引用将要改变)。
初始化成功,返回值将是非空,通过IF语句可以验证,可以....的代码块位置放入自定义的初始化代码。通常可以在这个位置创建并初始化实例变量。ps 其实还是不是很明白希望后面敲到代码会明白。
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
视图的生命周期。后面讲解
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *flipsLabel;
@property (nonatomic) int flipCount;
@end
-(void)setFlipCount:(int)flipCount
{
_flipCount =flipCount;
self.flipsLabel.text=[NSString stringWithFormat:@"Flip:%d",self. flipCount];
NSLog(@"%d",self.flipCount);
}
IBoutlet表示view 的UILabel 联接到controller上,*flipsLabel的属性改变view的UILabel也会跟着相应的改变
[NSString stringWithFormat:@"Flip:%d",self. flipCount]; 创建一个新的字符串 @"Flip:%d",self. flipCount“ self. flipCount将代替%d出现在字符串内容中。 消息接受对象NSString(注意此方法为类方法,对象接受者为类 非实例) 传入对象 元素(id),返回为新的NSString实例;
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *flipsLabel;
@property (nonatomic) int flipCount;
@end
- (IBAction)touchCardButton:(UIButton *)sender {
//UIImage *cardImage =[UIImage imageNamed:@"back"];
if([sender.currentTitle length]){ [sender setBackgroundImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal];
[sender setTitle:@"" forState:UIControlStateNormal];
}else
{
[sender setBackgroundImage:[UIImage imageNamed:@"front"] forState:UIControlStateNormal];
[sender setTitle:@"A♠?" forState:UIControlStateNormal];
}
self.flipCount++;
}
IBAction 是用户交互View中动作所引发的一系列方法(产生的结果,比如用户按BUTTON按钮,会弹出另一个对话框,就需引用IBAction)
[sender.currentTitle length] sender.currentTitle 是UIButton的元素属性,getter UIButton 中TItle的内容,得到一个字符串。
length方法是表示字符串字母个数, 消息接受者为字符串,没有参数 ,返回为NSUInteger
[UIImage imageNamed:@"back"] 创造图片 图片名位"back",(首先要导入图片文件夹 改名字为 back 图片就再代码中应用)
[sender setBackgroundImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal 设置UIButton 背景图片,
并设置状态(规则 forState 一般都是UIControlStateNormal ) 消息接受者为UIButton 传入参数为 UImage 和state 没有返回值