使用ARC时,Objective-C对象使用什么而不是结构?

时间:2013-05-02 08:06:25

标签: objective-c c struct automatic-ref-counting

ARC 禁止structunion s中的 Objective-C 对象。

除非您添加__unsafe_unretained,否则表示其未受管理。

如果有的话,我很想知道人们现在用什么代替struct

或者您手动保留所有内容?

4 个答案:

答案 0 :(得分:5)

这很简单 - 如果你想在一个结构中添加一个对象,那你就错了。每当需要一个struct来保存obj-c对象时,将struct转换为obj-c对象。

答案 1 :(得分:4)

我会在一个objc-object中管理不同的对象,如下所示:

@class MyFirst, MySecond;

@interface MyContainer : NSObject

@property (nonatomic, strong, readonly) MyFirst *firstInst;
@property (nonatomic, strong, readonly) MySecond *secondInst;

// optional: convenience initializer
+ (instancetype)containerWithFirstInst:(MyFirst *)firstInst secondInst:(MySecond *)secondInst;

@end

// required by linker: stub definition for the class declared above
@implementation MyContainer
@end


@interface SomeController : NSObject

- (void)doSomething;

@end

@implementation SomeController

- (void)doSomething {
    MyFirst *firstInstance = [[MyFirst alloc] initWithSomeParameters:...];
    MySecond *secondInstance = [[MySecond alloc] initWithSomeParameters:...];
    MyContainer *container = [MyContainer containerWithFirstInst:firstInstance secondInst:secondInstance];
    // use container as a struct (but it's definitely an object that is managed by ARC)
}

@end

答案 2 :(得分:1)

实现静态类并伪造其属性会更容易,如here所示?

答案 3 :(得分:0)

我在这里回答https://stackoverflow.com/a/28845377/1570826

也许某个具有正确级别的人可以将此标记或另一个标记为副本。