碎片化知识整理

@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  没有返回值

posted on 2015-09-22 00:28  乡道狗毛草  阅读(318)  评论(0编辑  收藏  举报

导航