这是财产声明,强大.
@protocol SDStoreVIEwDelegate <NSObject>// Methods@end@interface SDStoreVIEwController : UIVIEwController@property (strong,nonatomic) ID <SDStoreVIEwDelegate> delegate;@end
这是创建对象和委托集的位置.
SDStoreVIEwController *store = [[SDStoreVIEwController alloc] init];[store setDelegate:self];NSLog(@"1 %@",store.delegate); // Returns Object as expected[self presentVIEwController:store animated:YES completion:^{ NSLog(@"3 %@",store.delegate); // Returns Object as expected}];NSLog(@"4 %@",store.delegate); // Returns Object as expected
这是SDStoreVIEwController的vIEwDIDLoad.它已经失去了它的代表
- (voID)vIEwDIDLoad{ [super vIEwDIDLoad]; NSLog(@"3 %@",_delegate); // Returns NulL}
这是解雇,因为委托将被称为它不是NulL.
- (voID)dismiss:(ID)sender{ NSLog(@"5 %@",_delegate); // Returns NulL [self.delegate aMethod];}
更新
我使用了弱引用和强引用.我还使用了self.delegate和_delegate来访问该属性.而作为一个观点,aMethod回调没有通过,这是促使这个侦探工作找到它丢失的地方.
解决方法 首先,委托属性必须始终是弱的或不安全的,否则ARC不能释放具有相互强指针的类.@property (weak,nonatomic) ID <SDStoreVIEwDelegate> delegate;
要么
@property (unsafe_unretained,nonatomic) ID <SDStoreVIEwDelegate> delegate;
为什么你没有试图通过吸气剂到达代表财产?像这样:
NSLog(@"4 %@",self.delegate);
代替
NSLog(@"4 %@",_delegate);
还有一个额外的问题:你的方法在那条线上被召回了吗?
[self.delegate aMethod];
如果答案是肯定的,那么你没有丢失你的代表,如果答案是否定的,你在哪里设置代表?
总结以上是内存溢出为你收集整理的objective-c – 不保留财产(ARC)全部内容,希望文章能够帮你解决objective-c – 不保留财产(ARC)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)