如何在IOS上编写内存有效的代码?

时间:2012-11-29 05:14:48

标签: iphone objective-c ios cocoa-touch uiview

这个问题看起来非常直接,但我在这里有一个情况,我只需要一些帮助,如何以有效的方式做到这一点。比如说:我有三个视图视图1,视图2,视图3.

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

我认为从基地直接访问View 3以设置对象不好,或者从View 3访问基础来获取价值,任何想法的人如何处理这种情况。

作为初学者,我想澄清一下这个疑问。感谢。

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

使用单身人士在整个应用程序中的不同类/视图中保存所需的信息。

如果你不知道如何在Objective C中实现单例,那么

Follow this good tutorial

答案 2 :(得分:1)

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

视图1中的Alloc和init Employee对象。 覆盖View 2的init方法,如

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

同样覆盖View 3 init。

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

在视图3中的AppDelegate.Create appdelegate引用中创建该用户对象。

 in view3.h
     AppDelegate *appdelegate;


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

   appdelegate.userobj=......

   }

直接在view3中使用该对象

相关问题