使用类,属性和初始化

时间:2014-07-23 14:47:24

标签: objective-c alloc

我正在从事这项在线发现的工作(使用iOS进行中级应用开发)。我被困在c和d部分,不知道它要求我做什么。 我知道如何打印int(%i)和object(%@),但%@打印所有数据?任何帮助或建议将不胜感激。

第6部分

a)使用属性Aa1a2a3intstring实施课程int )。
b)新对象自动初始化为1"hello"1
c)还为任何数据和构造函数(不带alloc调用)提供初始化程序来执行相同的操作 d)确保%@ A对象将打印所有数据。

这是我到目前为止所做的:

// classA.h
#import <Foundation/Foundation.h>

@interface ClassA : NSObject
// Part 6a
@property int a1;
@property NSString *a2;
@property int a3;

-(ClassA *) initWithA1: (int) x andA2: (NSString *) s andA3: (int) y;
@end

//classA.m
#import "ClassA.h"

@implementation ClassA

-(ClassA *) initWithA1:(int)x andA2:(NSString *)s andA3:(int)y {
    self = [super init];
    if (self) {
        self.a1 = x;
        self.a2 = s;
        self.a3 = y;
    }
    return self;
}

// part 6b
-(ClassA *) init {
    if (self = [super init]) {
        self.a1 = 0;
        self.a2 =@"hello";
        self.a3 = 0;
    }
    return self;
}
@end

2 个答案:

答案 0 :(得分:1)

参考部分&#34; b&#34;你的问题:

作为一般规则,只有1个初始化程序应该执行&#34; real&#34;工作。这通常被称为指定的初始化程序。因此,您的init方法可能应该是这样的:

- (id) init
{
    return [self initWithA1:1 andA2:@"hello" andA3:1];
}

答案 1 :(得分:0)

正如@orbitor所写,你的班级应该有一个指定的初始化者。

  

因此,您的init方法可能应该是这样的:

- (id) init
{
    return [self initWithA1:1 andA2:@"hello" andA3:1];
}

要打印所有对象,您应该实现自定义description方法:

- (NSString *) description
{
    return [NSString stringWithFormat:@"a1 = %d, a2 = %@, a3 = %d", self.a1, self.a2, self.a3];;
}

根据c: 类方法new只调用allocinit方法,因此您只应确保正确编写了所有初始化程序。