gpt4 book ai didi

ios - 如何从静态初始化方法中获取初始化的 SELF

转载 作者:行者123 更新时间:2023-11-28 20:50:46 26 4
gpt4 key购买 nike

在下面的代码中,我尝试有一个可以静态调用的 init 方法,因为相信初始化方法应该由类负责。

但是,在下面的代码 .h 、 .m 和主文件中,编译时应用程序崩溃并收到以下消息:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[Synchron<0x1064540b0> init]: cannot init a class     object.'

请告诉我如何解决此错误以及为什么会出现此错误。

主要

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "Synchron.h"

int main(int argc, char * argv[]) {
@autoreleasepool {

[Synchron initSelfWithName:@"XYZ" andId:@"000"];
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

.m:

@implementation Synchron
@synthesize SynchronName;
@synthesize SynchronId;

+(id)initSelfWithName:(NSString *)synchName andId:(NSString *)synchId {
Synchron *synch;
if (self == [super init]) {
synch = [[Synchron alloc] init];
synch.SynchronName = synchName;
synch.SynchronId = synchId;
NSLog(@"synch: %@", synch.SynchronName);
NSLog(@"synch: %@", synch.SynchronId);
}
return synch;
}
@end

.h

@interface Synchron : NSObject {

}

@property (weak, nonatomic) NSString *SynchronName;
@property (weak, nonatomic) NSString *SynchronId;

+(id) initSelfWithName: (NSString *) synchName andId: (NSString *) synchId;

@end

最佳答案

您的代码有几个问题。

  1. 对标准属性使用 @synthesize 早已过时。
  2. 您需要您的属性是strong,而不是weak
  3. 类初始化器不应以 init 开头。
  4. 类方法中的
  5. self 表示类,而不是类的实例。
  6. 属性名称应以小写字母开头。

您更新后的代码将是:

.h

@interface Synchron : NSObject

@property (strong, nonatomic) NSString *name;
@property (string, nonatomic) NSString *id;

+ (instancetype)synchronWithName:(NSString *)name andId:(NSString *)id;

@end

.m

@implementation Synchron

+ (instancetype)synchronWithName:(NSString *)name andId:(NSString *)id {
Synchron *synch = [[self alloc] init];
synch.name = name;
synch.id = id;

return synch;
}

@end

现在您可以将其用作:

Synchron *val = [Synchron synchronWithName:@"XYZ" andId:@"000"];

关于ios - 如何从静态初始化方法中获取初始化的 SELF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58675199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com