小编use*_*375的帖子

这些if(0)条件有什么意义?

我发现它是开源的,我正在查看一些CFArray代码,我发现了一些奇怪的代码.这些"空" if (0)条件有什么意义?是否有一些疯狂的好处,或者这只是遗留下来的东西?此代码位于GitHub的CFArray.c的第957行.

if (0) {

} 
else if (NULL == array->_store) {
    if (0) {

    } 
    else if (0 <= futureCnt) {
           // blah blah
    }
}
Run Code Online (Sandbox Code Playgroud)

if-statement objective-c core-foundation

7
推荐指数
1
解决办法
1015
查看次数

ARC是否处理这种情况而不泄漏?如果是这样,怎么样?

ARC似乎非常好,但是有一两个边缘情况,典型的命名约定/规则对我来说并不清楚.查看NSThread周围的以下类别实现:

@interface NSThread (BlockAdditions)
- (void)performBlock:(dispatch_block_t)block;
@end

@implementation NSThread (BlockAdditions)
- (void)internal_performBlock:(dispatch_block_t)block
{
    block();
}

- (void)performBlock:(dispatch_block_t)block
{
    [self performSelector:@selector(internal_performBlock:)
                 onThread:self
               withObject:[block copy]
            waitUntilDone:NO];
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:block打电话后有泄漏-copy吗?编译器如何知道何时释放块?仪器没有检测到泄漏,但鉴于我对ARC的了解,这并不能说服我这个案例得到正确处理.感谢您的任何信息!

cocoa objective-c

4
推荐指数
1
解决办法
267
查看次数

如何释放在运行时添加到类别中的属性?

鉴于以下类别定义,无论是否使用ARC,我如何处理-dealloc?我目前正在使用ARC,据我所知,在仪器中进行探索,这些属性正在被清理,但我对此并不是100%有信心.

@interface NSObject (SuperUsefulThingIWishAllNSObjectsHad)
@property (nonatomic, copy) NSString *foo;
@end

#import <objc/runtime.h>
@implementation NSObject (SuperUsefulThingIWishAllNSObjectsHad)
static const void *MyPropertyKey = &MyPropertyKey;
@dynamic foo;
- (NSString *)foo
{
    return objc_getAssociatedObject(self,
                                    MyPropertyKey);
}

- (void)setFoo:(NSString *)foo
{
    objc_setAssociatedObject(self,
                             MyPropertyKey,
                             foo,
                             OBJC_ASSOCIATION_COPY);
}
Run Code Online (Sandbox Code Playgroud)

这更适合我自己的启发,但如果解决方案不太苛刻,我可能会有一些地方我真的想要使用它.

cocoa objective-c

4
推荐指数
1
解决办法
144
查看次数