Tag: 自动ref counting

弧,块和保留周期

使用ARC处理目标为4.0和5.0的iOS项目。 遇到与块有关的问题,ARC以及从块外部引用对象。 这是一些代码: __block AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCompletionBlock:^ { if ([operation isCancelled]) { return; } … do stuff … operation = nil; }]; 在这种情况下,编译器给出了一个警告,即在块中使用“操作”将导致保留周期。 在ARC下,__block现在保留该variables。 如果我添加__unsafe_unretained,编译器立即释放对象,所以很明显,这将无法正常工作。 我瞄准4.0,所以我不能使用__weak。 我试着做这样的事情: AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; __block __unsafe_unretained AFHTTPRequestOperation *weakOperation = operation; 但是虽然弱操作不是零,但是在块内部没有任何属性被填充。 鉴于上面列出的项目限制,处理这种情况的最佳方法是什么?

SFHFKeychainUtils。 iOS钥匙串。 ARC兼容

我想知道是否有人使用SFHFKeychainUtils设法修改它们与ARC兼容。 更确切地说, NSDictionary *attributeResult = NULL; NSMutableDictionary *attributeQuery = [query mutableCopy]; [attributeQuery setObject: (id) kCFBooleanTrue forKey:(__bridge id) kSecReturnAttributes]; OSStatus status = SecItemCopyMatching((CFDictionaryRef) attributeQuery,(CFTypeRef *)(attributeResult)); 我试过了 OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef) attributeQuery,(CFTypeRef *)(attributeResult)); 也 CFTypeRef subAttributeResult = (CFTypeRef *)(objc_unretainedPointer(attributeResult)); OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef) attributeQuery,(CFTypeRef *)(subAttributeResult)); 这2是我设法得到没有错误的唯一的两种方法。 任何其他方法通过添加objc_XXX而不是CFTypeRef在这里和那里得到我的错误(从obj-c指针到CFTypeRef的隐式转换在ARC中被禁止,将xparameter passing给y参数丢弃限定符)。 显然,第一段代码也会给出错误。 尽pipe在构build时我没有遇到任何错误,但是在到达这部分代码时,应用程序与EXC_BAD_ACCESS一起崩溃。 完整的SFHFKeychainUtils链接: https : //github.com/ldandersen/scifihifi-iphone/tree/master/security 请帮忙吗? […]

在Swift中定制类集群

这是一个比较常见的devise模式: https://stackoverflow.com/a/17015041/743957 它允许你从init调用中返回一个子类。 我试图找出使用Swift实现相同的事情的最佳方法。 我知道很可能有一个更好的方法来实现Swift同样的事情。 但是,我的课程将由我无法控制的现有Obj-C库进行初始化。 所以它需要以这种方式工作,并可以从Obj-C调用。 任何指针将非常感激。

ARC内存泄漏

我正在遇到与configuration为使用ARC的项目中的NSMutableArray相关的内存泄漏,我认为这是为您处理这些事情。 下面的代码触发NSNumbers的泄漏: NSMutableArray *myArray = [[NSMutableArray alloc] init]; NSNumber *myNumber = [NSNumber numberWithFloat:10]; [myArray addObject:myNumber]; 运行最后一行在debugging器中给出以下内容: objc [1106]:类__NSCFNumber的对象0x765ffe0 autoreleased没有到位的池 – 只是泄漏 – 打破objc_autoreleaseNoPool()debugging 除此之外,该对象似乎被正确添加到可变数组中, 我做了什么明显的错误? 注意:项目中有一个类不能与ARC一起工作,所以我使用编译器标志-fno-objc-arc将它从ARC中排除。 但是,在使用ARC的其他类中也发生了泄漏。 不知道这是否相关。 非常感谢您的帮助。

为什么弱的NSString属性不能在iOS中发布?

我写了下面的示例代码来看看ARC如何工作 @property (nonatomic, weak) NSString *myString; @property (nonatomic, weak) NSObject *myObj; @end @implementation ViewController @synthesize myString = _myString; @synthesize myObj = _myObj; – (void) viewDidAppear:(BOOL)animated { NSLog(@"Appearing Obj: !%@!",self.myObj); NSLog(@"Appearing String: !%@!",self.myString); } – (void)viewDidLoad { self.myObj = [[NSObject alloc] init]; self.myString = [[NSString alloc] init]; NSLog(@"Loading Obj %@",self.myObj); NSLog(@"Loading String: !%@!",self.myString); } 然而令人惊讶的是我得到了这些结果 2012-06-19 […]

ARC – __unsafe_unretained的含义?

只是想确保我说得对: 我是否需要__unsafe_unretain我不拥有的对象? 如果一个对象是__unsafe_unretained我是否需要在@property使用assign ? 这是否意味着对象不被保留,只是指向我分配的对象? 我何时想使用它,除了代表? 这是一个ARC的事情还是之前使用?

ARC是否与Core Graphics对象一起工作?

我最近开始使用自动引用计数(ARC)的新项目。 当我分配CALayer的内容时: UIView* view = … UIImage* image = … view.layer.contents = image.CGImage 我有一个错误 ARC不允许将非Objective-C指针types“CGImageRef”隐式转换为“id” 简单地把CGImageRef成id隐藏了这个错误,但是我想知道ARC是否仍然正常工作呢?

ARC真的支持iOS 4吗? iOS 4.2 SDK在链接时缺less与ARC相关的符号

自从ARC第一次宣布这是一个编译时的事情,我已经阅读和听到,将与iOS 4向后兼容。我已经成功地使用Xcode 4.2的自动重构将我的项目重构为AR​​C,并且在针对iOS 5.0 SDK,它工作正常。 但是,如果我尝试对我的iOS 4.2 SDK进行编译,它在链接时失败,缺less以下符号: _objc_retainAutoreleaseReturnValue _objc_autoreleaseReturnValue _objc_storeStrong _objc_retain _objc_release _objc_retainAutoreleasedReturnValue 我检查了,这些符号是在5.0而不是4.2: iPhoneOS5.0.sdk/usr/lib $ find . -type f|xargs nm|grep -i _objc_retain$ 00005ed0 T _objc_retain 000061d0 T _objc_retain iPhoneOS4.2.sdk/usr/lib $ find . -type f|xargs nm|grep -i _objc_retain$ [… *crickets* …] 这是否意味着苹果撒谎? 我认为,我是困惑,做错了什么,但我无法弄清楚什么。 这是通用汽车发布的Xcode 4.2(Build 4C199)

我应该在接口中声明variables还是在objective-c arc中使用属性?

方法1: @interface MyController : UIViewController { UILabel *myText; } @property (nonatomic, strong) UILabel *myText; 方法2: @interface MyController : UIViewController @property (nonatomic, strong) UILabel *myText; 方法3: @interface MyController : UIViewController { UILabel *myText; } 我读过一些关于这种东西的文章,但是我还没有真正意识到我必须采用哪种方法。 我也发现有人说方法1是一个古老的方式,所以我想知道使用ARC的ios sdk 6的最佳做法。 我知道使用属性声明variables是生成getter和setter的简单方法,有人build议使用它。 但是,我想问一个variables是不是由另一个类调用,是否有必要为variables使用属性? 并将其设置为接口内的私有variables? 还是只有在界面内声明的variables才更好? 我想学习最好的做法,所以请原谅我,如果这是一个愚蠢的问题。 而且,有些开发者用这种方式写@synthesize @synthesize myText=_myText; 但有些写道: @synthesize myText; 我也想知道其中的差别,哪一个更好? 非常感谢你!

泄漏仪器不显示时如何debugging内存泄漏?

我有一个用Swift编写的iOS应用程序正在泄漏内存 – 在某些情况下,应该释放一些对象,但它们不是。 我已经通过简单地添加deinitdebugging消息来了解这个问题: deinit { println("DEINIT: KeysProvider released") } 所以,在应该导致对象释放的事件之后,deinit消息应该出现在控制台中。 但是,对于一些应该发布的对象,则缺less该消息。 尽pipe如此,泄漏开发工具并没有显示任何泄漏。 我如何解决这种情况?