自从我完成任何编程以来已经很长时间了。曾经在阅读C& C ++ ......从未写过多少。
我有一个非常简单的类,我想用它来操作数组的内容(使用NSMutableArray
)。数组需要作为一个对象持久存在,所以我可以在一次运行程序期间对它进行多次更新(不担心将状态数据存储到磁盘)
这是我的问题。我不清楚我应该在何时/何时使用Alloc / Init我的Array对象,以便每次在我的iPhone视图上单击按钮时它都处于可用状态。
我正在尝试创建一个ViewController
的SubClass,其中包含一个Array作为实例变量,然后可以在响应View中按钮点击的代码中引用它。我尝试了3种方法
我试图在我作为同一个类的一部分编写的方法中引用数组实例变量。此版本的代码中没有Alloc / Init。当我调用addObject函数时,它似乎失败了,因为尚未分配/初始化数组对象。
我还尝试在viewWillDisplay
方法中使用Alloc / Init实现我的数组对象的实例。 Xcode编译器抱怨我从未使用过新分配的对象。
对于踢,我在我正在编写的'按钮点击'方法的范围内完成了一个alloc / init ...当然,每次点击我的按钮时都会分配一个新实例。
以下是我的示例.h
和.m
文件中的内容(显示方案1)
如果有人可以填写GIANT空白,我会非常感激我显然已经理解了应该如何使用Instance Variable对象。 (我已经阅读了关于Obj-C..etc的各种苹果文档。还搜索了我的大脑试图找到解释。
.h:
#import <UIKit/UIKit.h>
@interface ArrayManagerViewController : UIViewController {
NSMutableArray *buttonArray;
}
- (IBAction)buttonClicked:(id)sender;
@end
而.m
#import "ArrayManagerViewController.h"
@implementation ArrayManagerViewController
- (IBAction) buttonClicked:(id)sender {
NSString *senderTitle = [sender currentTitle];
int intSenderTitle = [senderTitle intValue];
[buttonArray insertObject:[NSString stringWithFormat:@"%d",
intSenderTitle]
atIndex:intSenderTitle];
for (id obj in buttonArray)
NSLog(@"Object Value %@", obj);
}
答案 0 :(得分:3)
如果在ViewController的整个生命周期中使用了数组,则可以在ArrayManagerViewController init(override)方法中分配/初始化数组,并在dealloc覆盖中调用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
答案 1 :(得分:1)
好吧,Objective C可能有点烦人,因为你基本上有两种语法,C和Smalltalk。您需要使用类似
的代码创建数组buttonArray = [[NSMutableArray alloc] init] ;
有一个很好的轻量级教程here。
答案 2 :(得分:1)
您应该知道必须在构造函数
中初始化实例变量 初始化UIViewController的消息是(通常)
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
所以你的实现将是
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
buttonArray = [[NSMutableArray alloc] init];
}
return self;
}
并且不要忘记在dealloc消息中释放你的buttonsArray
- (void) dealloc {
[buttonsArray release];
[super dealloc];
}
P.S.:在开始编写代码之前,先阅读developer.apple.com上的ObjC基础知识和Cocoa Memory Management