Objective c 基本目标C问题…让我发疯
我很久没有做过任何编程了。曾经是“好”在阅读C&C++ +…从未写过很多。 我有一个非常简单的类,我想用它来操作数组的内容(使用Objective c 基本目标C问题…让我发疯,objective-c,Objective C,我很久没有做过任何编程了。曾经是“好”在阅读C&C++ +…从未写过很多。 我有一个非常简单的类,我想用它来操作数组的内容(使用NSMutableArray)。阵列需要作为一个对象持久化,这样我就可以在一次运行程序的过程中对其进行多次更新(还不用担心将状态数据存储到磁盘) 这是我的问题。我不清楚我应该在何处/何时Alloc/Init我的数组对象,以便每次在iPhone视图上单击按钮时它都处于可用状态 我试图创建ViewController的子类,该子类包含一个数组作为实例变量,然后可以在响应视图
NSMutableArray
)。阵列需要作为一个对象持久化,这样我就可以在一次运行程序的过程中对其进行多次更新(还不用担心将状态数据存储到磁盘)
这是我的问题。我不清楚我应该在何处/何时Alloc/Init我的数组对象,以便每次在iPhone视图上单击按钮时它都处于可用状态
我试图创建ViewController
的子类,该子类包含一个数组作为实例变量,然后可以在响应视图中的按钮单击的代码中引用该数组。我试过3种方法
viewWillDisplay
方法中Alloc/Init我的数组对象的一个实例。Xcode编译器抱怨从未使用我新分配的对象.h
和.m
文件中得到的示例(这显示了场景1)
如果有人能填补我在理解如何使用实例变量对象方面的巨大空白,我将不胜感激。(我在Obj-C等网站上读过各种各样的苹果文档。我还用谷歌搜索我的大脑,试图找到一个解释
A.h:
#import <UIKit/UIKit.h>
@interface ArrayManagerViewController : UIViewController {
NSMutableArray *buttonArray;
}
- (IBAction)buttonClicked:(id)sender;
@end
好的,Objective C可能有点烦人,因为基本上有两种语法,C和Smalltalk
buttonArray = [[NSMutableArray alloc] init] ;
这里有一个很好的轻量级教程。好的,Objective C可能有点烦人,因为基本上有两种语法,C和Smalltalk。你需要用如下代码创建数组
buttonArray = [[NSMutableArray alloc] init] ;
有一个很好的轻量级教程。如果您的数组在ViewController的整个生命周期内都使用,您可能可以在ArrayManager控件init(override)方法中分配/初始化该数组,并在dealloc override中调用release
@implementation ArrayManagerViewController
- (ArrayManagerViewController *) init
{
if (self = [super init])
{
[[buttonArray alloc] init];
}
// handle errors...
return self;
}
- (void)dealloc
{
[buttonArray release];
[super dealloc];
}
// other methods
@end
如果数组在ViewController的整个生命周期内使用,则可能可以在ArrayManager IEWController init(override)方法中alloc/init该数组,并在dealloc override中调用release
@implementation ArrayManagerViewController
- (ArrayManagerViewController *) init
{
if (self = [super init])
{
[[buttonArray alloc] init];
}
// handle errors...
return self;
}
- (void)dealloc
{
[buttonArray release];
[super dealloc];
}
// other methods
@end
您应该知道,必须在构造函数中初始化实例变量 初始化UIViewController的消息(通常) 因此,您的实现将是
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
buttonArray = [[NSMutableArray alloc] init];
}
return self;
}
别忘了在dealloc消息中释放您的按钮阵列
- (void) dealloc {
[buttonsArray release];
[super dealloc];
}
注意:在开始编写代码之前,只需阅读developer.apple.com上的ObjC basics和Cocoa Memory Management,您应该知道必须在构造函数中初始化实例变量 初始化UIViewController的消息(通常) 因此,您的实现将是
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
buttonArray = [[NSMutableArray alloc] init];
}
return self;
}
别忘了在dealloc消息中释放您的按钮阵列
- (void) dealloc {
[buttonsArray release];
[super dealloc];
}
注:在开始编写代码之前,请先阅读developer.apple.com上的ObjC basics和Cocoa Memory Management我不明白你的问题。你想知道如何创建全局数组还是单例?我不明白你的问题。你想知道如何创建全局数组还是单例?我认为hellra1ser更正确ct,一个ViewController通常有一个比我上面所说的更具体的“init”版本。我只是想给出一个大概的方法。我认为hellra1ser更正确,一个ViewController通常有一个更具体的“init”版本你的答案是对的,init有一个比我更具体的版本。你的答案是对的,init有一个比我更具体的版本。