gpt4 book ai didi

java - 在 Objective-C 中创建存储类

转载 作者:行者123 更新时间:2023-11-29 04:09:53 25 4
gpt4 key购买 nike

嗨,我正在尝试为我的 iPhone 应用程序构建一个存储类。存储类用于存储食品订单列表,每个订单都有食品名称和价格。在应用程序中,当我按下食物菜单上的按钮时,我想将其按顺序存储到名为 order 的数组中。我是 Objective-c 的新手,我是一个Java用户。我想要构建的是一个类似于java的ArrayList类的存储类,myStorage类保存食物名称和价格。

我已经构建了一些代码,但编译时出现错误“在我的 Storages.h @property (nonatomic) NSMutableArray *orders; 上,‘order’的本地声明隐藏了实例变量”;

存储.h

#import <Foundation/Foundation.h>

@interface Storage : NSObject{
NSString *name;
NSInteger *price;
}
@property (nonatomic)NSString *name;
@property (nonatomic)NSInteger *price;
-(void) setName: (NSString *) n;
-(void) setPrice: (NSInteger *) p;
-(NSString *)getName;
-(NSInteger *)getPrice;

@end

存储.m

 #import "Storage.h"

@implementation Storage


@synthesize name;
@synthesize price;


- (void)setName:(NSString *)n {
name = n;
}
- (void)setPrice:(NSInteger *)n {
price = n;
}
- (NSString *)getName{
return name;
}
- (NSInteger *)getPrice{
return price;
}


@end

存储.h

#import <Foundation/Foundation.h>
#import "Storage.h"
@interface Storages : NSObject{
Storage *order;
NSMutableArray *orders;

@property (nonatomic) NSMutableArray *orders; // error "Type of property 'orders' does not match type of accessor 'setOrder'"

-(void) setOrders:(Storage *)order;
-(NSMutableArray *) orders;
@end

存储.m

#import "Storages.h"

@implementation Storages
@synthesize orders;

-(void) setOrders:(Storage *)oneOrder{

[orders addObject: oneOrder];
}
-(NSMutableArray *) orders;{
return orders;
}
@end

最佳答案

作为一名 Java 程序员,我可以说最接近 ArrayList 的是 NSMutableArray。所以你的存储文件做得很好。

您收到的警告是因为您实际上隐藏了 ivar(类变量)。

在这种情况下,可以这样声明:

@interface Storage : NSObject

@property(nonatomic,strong) name;
@property(nonatomic,strong) price;

@end

然后将这些属性合成到 .m 文件中。

另一个错误是一样的。当您创建并@synthesized @property时,编译器将为该 Prop 编写访问器,除非您提供自己的访问器,在本例中您提供了自己的访问器,但签名不多。

它不完全相同,但就像你用 Java 编写的:

public void setOrders(List<Order> list) {
}


@Override
public void setOrders(Order order) {
}

jdk 会阻止你这样做。

另外,非常重要的是,您已将您的问题标记为 iOS,那么您就没有像 Java 中那样的垃圾收集器。

使用 @property 的好处是,编译器将为您编写所有必要的代码行,以释放先前的变量并分配新值。

如果您用代码进行覆盖,您将失去所有这些好处并会出现一些内存泄漏。

关于java - 在 Objective-C 中创建存储类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14581540/

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