子类用一个名为subitems的数组属性保存父类对象,为什么不能获取

main.m如下


 1 #import <Foundation/Foundation.h> 2 #import "BNRContainer.h" 3 int main(int argc, const char * argv[]) { 4     @autoreleasepool { 5          6         //创建一个NSMutableArray对象,并用items变量保存该对象的地址 7         BNRContainer *items = [[BNRContainer alloc] init]; 8         for (int i = 0; i < 10; i++) { 9             BNRItem *item = [BNRItem randomItem];10             [items.subitems addObject:item];11         }12         // item数组一直为空,是为什么????????13         for (BNRItem *item in [items subitems]) {14            NSLog(@"%@",item);15        }16         NSLog(@"%@",items);17         //释放items所指向的NSMutableArray对象18         items = nil;19        20     }21     return 0;22 }


BNRContainer.h

1 #import "BNRItem.h"2 3 @interface BNRContainer : BNRItem4 @property (nonatomic)NSMutableArray *subitems;5 - (NSString *)description;6 @end

BNRContainer.m


 1 #import "BNRContainer.h" 2  3 @implementation BNRContainer 4 - (NSString *)description 5 { 6     NSString *string = [[NSString alloc] init]; 7     int sumtalto = 0; 8     NSLog(@"%@",self.subitems); 9         NSMutableArray *array = [self subitems];// 这个方法不对吗?? 不能获取subitems 中的BNRItem对象??10         for (int i = 0;i < [array count];i++) {11             12             sumtalto += [array[i] valueInDollars] + [self valueInDollars];13            14         }15         string = [NSString stringWithFormat:@"BNRItem and BNRContainer is total %d ",sumtalto];16         return string ;17     18 19 }20 @end


BNRItem.h

 1 #import <Foundation/Foundation.h> 2  3 @interface BNRItem : NSObject 4 { 5     NSString *_itemName; 6     NSString *_serialNumber; 7     int _valueInDollars; 8     NSDate *_dateCreated; 9 10 }11 12 + (instancetype)randomItem;13 //BNRItem类的指定初始化方法14 - (instancetype)initWithItemName:(NSString *)name15                   valueInDollars:(int)value16                     serialNumber:(NSString *)sNumber;17 18     19 20 21 - (instancetype)initWithItemName:(NSString *)name;22 23 - (instancetype)initWithItemName:(NSString *)name24                     serialNumber:(NSString *)sNumber;25 - (void)setItemName:(NSString *)str;26 - (NSString *)itemName;27 28 - (void)setSerialNumber:(NSString *)str;29 - (NSString *)serialNumber;30 31 - (void)setValueInDollars:(int)v;32 - (int)valueInDollars;33 34 - (NSDate *)dateCreated;35 @end

BNRItem.m

  1 #import "BNRItem.h"  2   3 @implementation BNRItem  4   5 + (instancetype)randomItem  6 {  7    //创建不可变数组对象,包含三个形容词  8     NSArray *randomAdjectiveList = @[@"Fluffy",@"Rusty",@"Shiny"];  9      10     //创建不可变数组对象,包含三个名词 11      12     NSArray *randomNounList = @[@"Bear",@"Spork",@"Mac"]; 13      14      15     //根据数组对象所含对象的个数,得到随机索引 16     //注意:运算符%是模运算符,运算后得到的是余数 17     //因此adjectiveIndex 是一个0到2(包括2)的随机数 18      19     NSInteger adjectiveIndex = arc4random() % [randomAdjectiveList count]; 20     NSInteger nounIndex = arc4random() % [randomNounList count]; 21      22     //注意,类型为NSInteger的变量不是对象 23     //NSInteger是一种针对unsigned long(无符号长整数)的类型定义 24      25     NSString *randomName = [NSString stringWithFormat:@"%@  %@", 26                                   randomAdjectiveList[adjectiveIndex], 27                                        randomNounList[nounIndex]]; 28  29     int randomValue = arc4random() % 100; 30      31     NSString *randomserialNumber = [NSString stringWithFormat:@"%c%c%c%c%c", 32                                     '0' + arc4random() % 10, 33                                     'A' + arc4random() % 26, 34                                     '0' + arc4random() % 10, 35                                     'A' + arc4random() % 26, 36                                     '0' + arc4random() % 10]; 37      38     BNRItem *newItem = [[self alloc] initWithItemName:randomName 39                                        valueInDollars:randomValue 40                                          serialNumber:randomserialNumber]; 41      42     return newItem; 43  44  45  46 } 47 - (instancetype)initWithItemName:(NSString *)name 48                   valueInDollars:(int)value 49                     serialNumber:(NSString *)sNumber 50 { 51     //调用父类的指定初始化方法 52     self = [super init]; 53      54     //父类的初始化方法是否成功创建了父类对象 55     if (self) { 56         //为实例变量设定初始值 57          58         _itemName = name; 59         _valueInDollars = value; 60         _serialNumber = sNumber; 61          62         //设置_dateCreated 的值为系统当前时间 63         _dateCreated = [[NSDate alloc] init]; 64     } 65      66     //返回初始化后对象的新地址 67      68     return self; 69  70 } 71 - (instancetype)initWithItemName:(NSString *)name 72 { 73     return [self initWithItemName:name 74                    valueInDollars:0 75                      serialNumber:@""]; 76  77 } 78 - (instancetype)init 79 { 80     return [self initWithItemName:@"Item"]; 81  82 } 83 - (instancetype)initWithItemName:(NSString *)name serialNumber:(NSString *)sNumber 84 { 85     return [self initWithItemName:name 86                    valueInDollars:0 87                      serialNumber:sNumber]; 88  89 } 90 - (void)setItemName:(NSString *)str 91 { 92     _itemName = str ;//与self.itemName = str ;有什么区别? 93      94 } 95 - (NSString *)itemName 96 { 97     return _itemName; 98  99 }100 - (void)setSerialNumber:(NSString *)str101 {102 103     _serialNumber = str;104     105 }106 - (NSString *)serialNumber107 {108     return _serialNumber;109 }110 - (void)setValueInDollars:(int)v111 {112     _valueInDollars = v;113 }114 - (int)valueInDollars115 {116     return _valueInDollars;117 }118 - (NSDate *)dateCreated119 {120     return _dateCreated;121 }122 - (NSString *)description123 {124   NSString *descriptionString =125     [[NSString alloc] initWithFormat:@"%@ (%@): Worth $%d,recorded on %@",126                       self.itemName,127                       self.serialNumber,128                       self.valueInDollars,129                       self.dateCreated ];130     131     return descriptionString;132 }133 @end

没有什么可留恋,只有抑制不住的梦想,

子类用一个名为subitems的数组属性保存父类对象,为什么不能获取

相关文章:

你感兴趣的文章:

标签云: