Objective c 基本目标C问题…让我发疯

Objective c 基本目标C问题…让我发疯,objective-c,Objective C,我很久没有做过任何编程了。曾经是“好”在阅读C&C++ +…从未写过很多。 我有一个非常简单的类,我想用它来操作数组的内容(使用NSMutableArray)。阵列需要作为一个对象持久化,这样我就可以在一次运行程序的过程中对其进行多次更新(还不用担心将状态数据存储到磁盘) 这是我的问题。我不清楚我应该在何处/何时Alloc/Init我的数组对象,以便每次在iPhone视图上单击按钮时它都处于可用状态 我试图创建ViewController的子类,该子类包含一个数组作为实例变量,然后可以在响应视图

我很久没有做过任何编程了。曾经是“好”在阅读C&C++ +…从未写过很多。 我有一个非常简单的类,我想用它来操作数组的内容(使用
NSMutableArray
)。阵列需要作为一个对象持久化,这样我就可以在一次运行程序的过程中对其进行多次更新(还不用担心将状态数据存储到磁盘)

这是我的问题。我不清楚我应该在何处/何时Alloc/Init我的数组对象,以便每次在iPhone视图上单击按钮时它都处于可用状态

我试图创建
ViewController
的子类,该子类包含一个数组作为实例变量,然后可以在响应视图中的按钮单击的代码中引用该数组。我试过3种方法

  • 我尝试在作为同一类的一部分编写的方法中引用数组实例变量。此版本的代码中没有Alloc/Init。当我调用addObject函数时,它似乎失败了,因为数组对象尚未分配/初始化

  • 我还尝试在
    viewWillDisplay
    方法中Alloc/Init我的数组对象的一个实例。Xcode编译器抱怨从未使用我新分配的对象

  • 对于kicks,我已经在我正在编写的“button click”方法的范围内完成了alloc/init……当然,这会在每次单击按钮时分配一个新实例

  • 下面是我在
    .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有一个比我更具体的版本。