在Objective-C块中修改全局变量

拉屎

因此,我有一个实例函数,该函数以aNSInteger作为参数;在功能上,我有一个障碍。我需要修改NSInteger传递给函数的。但这不是一种__block类型。我应该怎么做呢?原始功能太复杂了,所以我在这里放一个简化的版本...

//@interface
@property(nonatomic) NSInteger input; 
...

//@implementation
[self doThis:self.input];

-(void)doThis:(NSInteger)integer{
    [API doSomethingWithThisInteger:integer success:^(NSMutableDictionary *data){
        ...
    } failure:^(NSString *error){
        integer--;
    }
}

我知道我应该传递一个__block类型变量,但是如果我在函数(即__block NSInteger temp = integer)中初始化了一个新变量,然后将其放置块中,temp--而不是integer--放在failure块中,则self.input它将保持不变,因为初始化语句复制的是值input而不是引用对它。我应该在这里做什么?有没有办法使新变量成为我传递给函数的变量的引用?谢谢!


编辑:解决问题的方法-使用全局变量而不是属性-

@implementation
NSInteger input;
....
[self doThis:&input]; //sends in the address of the input
....
- (void)doThis:(NSInteger *)integer{ //takes the pointer of the input instead of its actual value so it gets referenced rather than getting copied
    [API doSomethingWithThisInteger:integer success:^(NSMutableDictionary *data){
    ...
} failure:^(NSString *error){
    *integer = *integer - 1; //dereference the pointer to get the value.
}
汤米

与C一样,Objective-C传递值。通过将对象放在堆上并通过指针引用它们,将对象焊接在C之上。因此,您所传递的不是对象本身,而是对象的地址。地址本身按值传递。但是,如果有人知道地址,他们可以去堆并修改对象。

您输入的doThis:是参数integer因此,当调用该方法时,将会发生:

  1. 无论您在何处编写了参数,都将对其进行评估,并在必要时隐式转换为NSInteger;
  2. 该方法的副本NSInteger将提供给该方法;
  3. 收到自己的副本后,integer现在等效于该方法的局部变量。

因此,例如,您可以这样做:

[object doThis:8];

8被复制到内的有效局部变量中doThis:,因此integer无论您传入常量是什么,您都可以对其进行修改

如果您希望doThis:能够修改整数,则需要提供一个指向它的指针。并且一旦有了,在块内使用该指针应该没有问题。指针本身将被捕获,但是,就像在将指针传递给方法时一样,如果您修改指针指向的内容,则将影响在此查找的其他所有人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Objective-C中对全局变量进行分类

来自分类Dev

在Objective-C中使用全局变量

来自分类Dev

如何在Objective-C中制作和访问全局变量

来自分类Dev

使用std :: shared_ptr作为Objective-C中的全局变量

来自分类Dev

在Objective-C中声明全局变量的正确方法是什么

来自分类Dev

使用std :: shared_ptr作为Objective-C中的全局变量

来自分类Dev

无法在C中修改全局变量

来自分类Dev

是否可以从Objective-C文件访问Swift全局变量?

来自分类Dev

Objective-C中按块捕获变量的规则

来自分类Dev

Objective-C中按块捕获变量的规则

来自分类Dev

Objective-C引用块外的变量

来自分类Dev

Objective-C块的全局默认值

来自分类Dev

Objective-C块的全局默认值

来自分类Dev

Objective-C块的全局默认值

来自分类Dev

Objective-C块:从块内部返回__block变量

来自分类Dev

Objective-C:块中的动画

来自分类Dev

如何在Objective C中存储块?

来自分类Dev

在objective-c块中传递参数

来自分类Dev

无法在javascript中修改全局变量

来自分类Dev

Objective-C块错误

来自分类Dev

块编程iOS Objective c

来自分类Dev

在Objective-C中创建全局God模式变量的最佳方法

来自分类Dev

?:在Objective-C中

来自分类Dev

在AppDelegate Objective c中添加变量

来自分类Dev

Python修改全局变量

来自分类Dev

从gdb修改全局变量

来自分类Dev

从循环修改全局变量

来自分类Dev

从函数修改全局变量

来自分类Dev

Objective-C @实现变量