Objective c 什么';自我与自我之间的区别是什么_xxx和xxx?

Objective c 什么';自我与自我之间的区别是什么_xxx和xxx?,objective-c,objective-c-blocks,Objective C,Objective C Blocks,有一些代码: @interface Person() { NSString *_name1; } @property NSString *name2; @property void (^blk)(void); @end 那么,self->\u name1和\u name1之间有什么区别呢?以及self->\u name2和\u name2之间的区别 __weak __typeof__(self) weakSelf = self; self.blk = ^(){

有一些代码:

@interface Person() {
    NSString *_name1;
}
@property NSString *name2;
@property void (^blk)(void);
@end
那么,
self->\u name1
\u name1
之间有什么区别呢?以及
self->\u name2
\u name2
之间的区别

    __weak __typeof__(self) weakSelf = self;
    self.blk = ^(){
    __strong __typeof(self) strongSelf = weakSelf;
        _name1 = @"123";
    }

将有一个保留周期。解决方案是将
\u name1
更改为
strongSelf->\u name1
,但是为什么呢?

如果
\u name1
是类
C
的实例变量,那么在类
C
的实例方法的主体中,简单变量引用:

_name1
仅是以下内容的简写:

这意味着:

在变量
self
引用的对象中访问实例变量
\u name1
,并且
self
自动设置为引用调用实例方法的对象(例如在
[v method…]
当执行
方法
时,其
self
变量引用调用方引用的同一对象

这种简写意味着意外的(并非所有的保留周期都是不需要的或不好的)保留周期会发生,因为
self
的使用不是很明显

在代码示例中,您有这样一个对
self
的隐藏引用,您对
weakSelf
strongSelf
的使用不会改变速记的扩展,因此:

_name1 = @"123";
仍然扩展到:

self->_name1 = @"123";
你为避免“保留”循环所做的所有努力都白费了。为了解决这个问题,你不能使用速记,而是写下你想要的:

strongSelf->_name1 = @"123";

如果
\u name1
是类
C
的实例变量,则在类
C
的实例方法的主体中,简单变量引用:

_name1
仅是以下内容的简写:

这意味着:

在变量
self
引用的对象中访问实例变量
\u name1
,并且
self
自动设置为引用调用实例方法的对象(例如在
[v method…]
当执行
方法
时,其
self
变量引用调用方引用的同一对象

这种简写意味着意外的(并非所有的保留周期都是不需要的或不好的)保留周期会发生,因为
self
的使用不是很明显

在代码示例中,您有这样一个对
self
的隐藏引用,您对
weakSelf
strongSelf
的使用不会改变速记的扩展,因此:

_name1 = @"123";
仍然扩展到:

self->_name1 = @"123";
你为避免“保留”循环所做的所有努力都白费了。为了解决这个问题,你不能使用速记,而是写下你想要的:

strongSelf->_name1 = @"123";

我不认为将
\u name1
更改为
self->\u name1
会使工作有所不同。我知道,他们是一样的,是我的错。我应该使用weakSelf。我不认为将
\u name1
更改为
self->\u name1
会使它工作起来有所不同。我知道,他们是一样的,是我的错。我应该用懦夫。