UIviewController Alloc 在访问时更改 setter/getter 值



好的,所以我一直在试图弄清楚这一点,但我不知道......基本上,我的ios应用程序中有两个类,第一个是我的主视图,第二个是存储一些变量的类。 我有一个开关,当开关的状态发生变化时,它会将另一个类中的布尔 getter/setter 变量设置为该状态。 然后我获取值并将其打印在日志中。 但是,我注意到的是,每次使用代码调用视图控制器时:

StoredVars *stored = [[StoredVars alloc]init]; 

该值默认为 0... 为了说明这一点,我添加了视图控制器调用的第二个实例,两个日志调用打印出不同的值。 Switchy 是第二类"StoredVars"中的布尔设置器/获取器。有人可以解释为什么会发生这种情况吗? 下面是我第一类的 .m 文件中的代码:

StoredVars *stored = [[StoredVars alloc]init];
[stored setSwitchy:(_toggle.on)];
NSLog(@"%d", [stored switchy]);
StoredVars *stored2 = [[StoredVars alloc]init];
NSLog(@"%d", [stored2 switchy]);

如果我打开开关,第一个日志打印 1,第二个日志打印 0。 如果我关闭开关,它们都打印 0。

谢谢大家:)

此行

StoredVars *stored = [[StoredVars alloc]init];

正在销毁以前存储在stored变量中的任何内容并创建一个全新的对象,换句话说,每次调用此行时,"store"的先前内容都会被销毁。您只需要初始化一次(可能在 ViewController 的 init 方法中),并继续使用它而不重新初始化它。

[stored setSwitchy:(_toggle.on)];

二传手和getter是这样的:

    - (void)setSwitchy:(BOOL)bSwitchy
    {
       _bSwitchy = bSwitchy;
    }
    - (BOOL)switchy
    {
       return _bSwitchy;
    }

因此,属性值在 setter 中正在更改。第二个打印一个0,即你没有调用setter,那么你getter将重新调整默认值。

顺便说一下,存储和存储2完全是两个对象。

我知道

你有两个视图控制器权限。

所以我称它们为放置交换机的视图控制器。和另一个视图控制器,你想要切换效果。

1) 在视图控制器中,当开关值更改时>放置此代码。

 AnotherViewController *anotherVc=[[AnotherViewController alloc]init];
    [anotherVc setToggle:sw];  //sw will be your switch changed value.

2) 在另一个视图控制器.h 文件中

 @interface AnotherViewController : UIViewController
{
      int  _toggle;
}
@property(nonatomic,assign)int toggle;

3)合成切换 并在 OtherviewController.m 文件中

   -(void)setToggle:(int)toggle1{
    toggle=toggle1;
}

4)在视图中将出现或任何地方 你可以检查

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:YES];
    if(toggle)
        swithlbl.text=@"YES";
    else
        swithlbl.text=@"NO";
}