如何在 IOS 上编写内存高效代码



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

首先,我从基本视图推送视图 1,然后从视图 1 推送视图 2

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

我认为直接从 base 访问 View 3 来设置对象是不好的,或者从 View 3 访问 base 以获得值,任何想法家伙如何处理这种情况。

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

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

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

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

据我了解,您正在尝试在视图 1 中创建一个对象并在视图 3 中使用。假设该对象是员工类。以下是使用它的方法。

在视图 1 中分配和初始化员工对象。覆盖视图 2 的 init 方法,例如

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

类似地覆盖视图 3 初始化。

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

您可以将用户信息定义为类UserInfo.然后您可以在UserInfo.m中将sth编码为bellow:

static UserInfo *sharedUserInfo_ = nil;
+ (UserInfo*)sharedUserInfo{
  if(sharedUserInfo_ == nil){
  sharedUserInfo_ = [[UserInfo alloc] init];
}
return sharedUserInfo_;  
}

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

 in view3.h
     AppDelegate *appdelegate;

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

直接在视图中使用该对象3

最新更新