协议为什么用assign修饰

高分请问一下,协议为什么用assign修饰?

比如自定义一个协议
@protocol QYchangeValueDelegate <NSObject>

@optional

-(void)changeLableValue:(NSString *)value;

@end

下面的为什么用assign修饰呢
@property (nonatomic,assign) id <QYchangeValueDelegate>delegate;
最新回答
我迁就她的任性

2024-11-29 17:04:09

属性关系有两种主要类型:strong和weak,相当于非ARC环境里的retain和assign。只要存在一个强引用,对象就会一直存在,不会被销毁。强引用类似于C++中的shared_ptr,只不过管理引用计数的代码是在编译时生成的,而shared_ptr是在运行时通过操作符重载确定的。

Objective-C中一直存在循环引用的问题,但在实际应用中很少出现循环引用。对于过去那些使用assign属性的地方,在ARC环境中要使用weak代替。大部分引用循环是由委托(delegate)引起的,所以应该总是把delegate属性声明为weak。当引用的对象被销毁之后,weak引用会被自动置为nil,与assign相比这是一个巨大的进步,因为assign可以指向被释放掉的内存,导致程序崩溃