【问题标题】:Working with Class, properties and initialization使用类、属性和初始化
【发布时间】:2014-07-23 14:47:23
【问题描述】:

我正在完成我在网上找到的这个作业(使用 iOS 进行中级应用程序开发)。我被困在 c 和 d 部分,不知道它要求我做什么。 我知道如何打印 int (%i) 和 object (%@),但是 %@ 打印所有数据?任何帮助或建议将不胜感激。

第六部分

a) 使用属性 a1a2a3intstringint)实现类 A
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

【问题讨论】:

  • 您说“c 部分,d 部分”等,但您没有提供作业的链接。
  • 它包含在描述中。我通过使用空白使其更加明显。
  • 我还是没看到?!?
  • 查看示例如何覆盖-description(这是d 部分)
  • 就在我的问题下方,上面写着第 6 部分并标记为 a b c d?

标签: objective-c alloc


【解决方案1】:

关于您问题的“b”部分:

作为一般规则,只有 1 个初始化程序应该做“真正的”工作。这通常被称为指定初始化器。所以,你的 init 方法应该是这样的:

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

【讨论】:

  • 谢谢。所以我做的没有错,但更好的方法是你建议的?
  • 如果说“没有错”,我们可以表示代码在这种情况下适用于您,那么我会同意的。指定初始化器是 Obj-C 和 Apple 框架中普遍接受的设计模式。 init 方法是默认方法(用户始终可以对任何对象调用 alloc/init 并期望得到有用的东西)——您的工作是确保您的对象始终正确初始化。保证这一点的最简单方法是指定的初始化模式。
【解决方案2】:

正如@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 方法,因此您只应确保正确编写所有初始化程序。

【讨论】:

    猜你喜欢
    • 2021-11-21
    • 2017-09-29
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2014-09-14
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多