我有一个静态表视图(FirstViewController),有3行,每行都在各自的部分。前两个单元格中包含UITextFields,当用户点击它们或单元格时,它们是可编辑的。最后一个单元格有一个UILabel,当点击时会推送包含UITextField的SecondViewController。当用户按下时,UILabel的值需要是UITextField的值。
如果我在SecondViewController上创建一个委托属性(assign),它设置为FirstViewController,那么FirstViewController仍然会在内存中而不是nill有什么保证?据我所知,视图控制器不是最顶级的视图控制器(可见的控制器),它可以被解除分配。那么如果设备内存耗尽并释放FirstViewController会发生什么,然后当用户按下后返回方法将不会发送,因为delegate
将为nil,之后将出现一个新的FirstViewController实例创建并弹出到屏幕上,而不从SecondViewController接收值。
我不想在AppDelegate中使用“全局”变量,因为我个人认为这有点混乱。
答案 0 :(得分:0)
您可以创建一个Data类,您可以在其中设置变量或数组的属性(用于在 UITableView 中显示数据)。在数据类中实现一个类方法,该方法检查该对象是否已被实例化。如果没有,那就是这样。它是这样的:
//DataClass.h
@interface DataClass : NSObject {
NSMutableArray *nameArray;
NSMutableArray *placeArray;
}
@property(nonatomic,retain)NSMutableArray *nameArray;
@property(nonatomic,retain)NSMutableArray *placeArray;
+(DataClass*)getInstance;
@end
//DataClass.m
@implementation DataClass
@synthesize nameArray;
@synthesize placeArray;
static DataClass *instance =nil;
+(DataClass *)getInstance
{
@synchronized(self)
{
if(instance==nil)
{
instance= [DataClass new];
}
}
return instance;
}
现在在视图控制器中,您需要将此方法称为:
DataClass *obj=[DataClass getInstance];
并使用数组。
通过这种方式,您可以在不干扰AppDelegate
的情况下分配数据,这是一种很好的做法。