-1

这个问题看起来很直接,但是我这里有一个情况,我只需要一些帮助如何有效地做到这一点。例如:我有三个视图视图 1、视图 2、视图 3。

首先,我从基础视图推送视图 1,然后从视图 1 推送视图 2,然后从视图 2 推送视图 3。现在视图 3 需要一个保存用户信息的对象。所以在这里我所做的是将用户对象从基础 1 传递给视图 1,并在加载所有视图时传递给视图 2 和视图 3,这里每个视图都将该对象存储为 Ivar,即使视图 1 和 2 不使用它.

我不认为直接从基础访问视图 3 来设置对象,或者从视图 3 访问基础以获得价值,知道如何处理这种情况。

作为一个初学者,我只想澄清这个疑惑。谢谢。

4

5 回答 5

5

如果您在所有 3 个视图中传递相同的对象,它不会占用任何额外的内存,因为每个视图只会增加该对象的保留计数。因此,有效地只计算了一个对象的内存。

于 2012-11-29T06:36:38.293 回答
1

使用单例将您需要的信息保存在应用程序的不同类/视图中。

如果您不知道如何在 Objective C 中实现单例,请遵循这个很好的教程。

于 2012-11-29T05:24:37.240 回答
1

据我了解,您正试图在视图 1 中创建一个对象并在视图 3 中使用。假设该对象是 Employee Class。以下是如何使用它。

视图 1 中的 Alloc 和 init Employee 对象。重写视图 2 的 init 方法,如

-(id)initWith:(Employee*)emp
{
     temEmp=emp;
}

同样覆盖 View 3 init。

由于您只分配和初始化对象一次,因此所有三个视图共享同一个对象。你不会浪费内存

于 2012-11-29T05:27:32.473 回答
1

您可以将用户信息定义为一个类 UserInfo。然后您可以在 UserInfo.m 中编码如下:

static UserInfo *sharedUserInfo_ = nil;
+ (UserInfo*)sharedUserInfo{
  if(sharedUserInfo_ == nil){
  sharedUserInfo_ = [[UserInfo alloc] init];
}
return sharedUserInfo_;  
}
于 2012-11-29T05:39:41.107 回答
1

在 AppDelegate 中创建该用户对象。在 view3 中创建 appdelegate 引用。

 in view3.h
     AppDelegate *appdelegate;


 in view3.m
 -(void)viewDidLoad
   {
   appdelegate = (AppDelegate *)[[UIApplication SharedApplication]delegate];

   appdelegate.userobj=......

   }

直接在 view3 中使用该对象

于 2012-11-29T06:34:19.503 回答