IOS编程第四版第二章:Objective-C

本章通过一个由浅入深的例子,简洁地介绍了Objective-c的类和初始化

涉及知识点:

1. 用for(xxxx in xxx) 快速迭代的方法需要注意:不能使用它去在集合中增加或删除Objects。如果需要这样做,要使用普通for循环


2. %@必须对应一个对象,这是因为每个对象都有一个desciption方法。


3. 类方法通常用来创建一个类的新的实例或者访问一些类的全局属性。 类方法不操作对象,也不能访问实例变量。


4. 关于初始化方法的简单规则

  • 一个类继承所有父类的初始化方法并且可以有任意多个自己的初始化方法
  • 每个类制定一个初始化方法为指定的初始化方法。
  • 这个指定初始化方法必须在其内部最开始的地方先调用其父类的指定初始化方法
  • 这个类其他的初始化方法都调用这个指定的初始化方法
  • 如果这个类的指定初始化方法跟父类的指定初始化方法不同,则必须重写父类的指定初始化方法。
指定初始化方法通常是那个初始化最多实例变量的那个初始化方法。


5. 注意头文件中声明的顺序
先是实例变量,然后是类方法,初始化方法,实例方法。 这种顺序让头文件更加好读。

6. NSArray可以包含不同类型的对象。
但是它不能包含基本类型和c 结构类型的数据,如果非要这么做,需要类型转换成NSNumber, NSValue和NSData.
不能使用nil作为数组元素插入数组。要使用[items addObject:[NSNull null]];

数组可以使用短操作符代替长消息来访问数组内的元素
如:NSString *foo = item[0] is equuivalent to NSString *foo = [item objectAtIndex: 0];
它也同样适用与可变数组。

本章实现代码如下:
Item.h
#import <Foundation/Foundation.h>

@interface Item : NSObject
{
    NSString *_itemName;
    NSString *_serialNumber;
    int _valueInDollars;
    NSDate *_dateCreated;
}

+ (instancetype)randomItem;

// Designated initializer for BNRItem
- (instancetype)initWithItemName:(NSString *)name
                  valueInDollars:(int)value
                    serialNumber:(NSString *)sNumber;

- (instancetype)initWithItemName:(NSString *)name;

- (void)setItemName:(NSString *)str;
- (NSString *)itemName;

- (void)setSerialNumber:(NSString *)str;
- (NSString *)serialNumber;

- (void)setValueInDollars: (int)v;
- (int)valueInDollars;

- (NSDate *)dateCreated;

@end

Item.m
//
//  Item.m
//  RandomItems
//
//  Created by zhengnan on 15/6/27.
//  Copyright (c) 2015年 zhengnan. All rights reserved.
//

#import "Item.h"

@implementation Item

+ (instancetype)randomItem{

    NSArray *randomAdjectiveList = @[@"Fluffy", @"Rusty", @"Shiny"];
    
    NSArray *randomNounList = @[@"Bear", @"Spork", @"Mac"];
    
    NSInteger adjectiveIndex = arc4random() % randomAdjectiveList.count;
    NSInteger nounIndex = arc4random() % randomNounList.count;
    
    NSString *randomName = [NSString stringWithFormat:@"%@ %@",
                            randomAdjectiveList[adjectiveIndex],
                            randomNounList[nounIndex]];
    
    int randomValue = arc4random() % 100;
    
    NSString *randomSerialNumber = [NSString stringWithFormat:@"%c%c%c%c%c",
                                    '0' + arc4random() % 10,
                                    'A' + arc4random() % 26,
                                    '0' + arc4random() % 10,
                                    'A' + arc4random() % 26,
                                    '0' + arc4random() % 10];
    
    Item *newItem = [[self alloc] initWithItemName:randomName valueInDollars:randomValue serialNumber:randomSerialNumber];
    
    return newItem;
}

- (instancetype)initWithItemName:(NSString *)name
                  valueInDollars:(int)value
                    serialNumber:(NSString *)sNumber{

    self = [super init];
    
    if(self){
        _itemName = name;
        _serialNumber = sNumber;
        _valueInDollars = value;
        
        _dateCreated = [[NSDate alloc] init];
    }
    
    return self;
}


- (instancetype)initWithItemName:(NSString *)name{

    return [self initWithItemName:name valueInDollars:0 serialNumber:@""];
}


- (instancetype)init{

    return [self initWithItemName:@"Item"];
}

- (void)setItemName:(NSString *)str{
    
    _itemName = str;
}

- (NSString *)itemName{
    return _itemName;
}

- (void)setSerialNumber:(NSString *)str{
    
    _serialNumber = str;
}

- (NSString *)serialNumber{
    return _serialNumber;
}

- (void)setValueInDollars:(int)v{
    _valueInDollars = v;
}

- (int)valueInDollars{
    return _valueInDollars;
}

- (NSDate *)dateCreated{
    return _dateCreated;
}

- (NSString *)description{

    NSString *descriptionString =
    [[NSString alloc] initWithFormat:@"%@ (%@): Worth $%d, recored on %@",
        self.itemName, self.serialNumber, self.valueInDollars, self.dateCreated];
    
    return descriptionString;
}

@end

main.m测试文件
//
//  main.m
//  RandomItems
//
//  Created by zhengnan on 15/6/27.
//  Copyright (c) 2015年 zhengnan. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Item.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        NSMutableArray *items = [[NSMutableArray alloc] init];
        
        for (int i = 0; i < 10; i++) {
            Item *item = [Item randomItem];
            [items addObject:item];
        }
        
        for (Item *item in items) {
            NSLog(@"%@", item);
        }
        
        //Destroy the mutable array object
        items = nil;
        
    }
    return 0;
}

源码地址:https://github.com/ianzhengnan/RandomItem



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值