小编Pro*_*ber的帖子

在类扩展或@implementation块中添加伪私有ivars有什么区别?

将伪私有实例变量放在.m文件中的类扩展中,或者将它们放在新引入的@implementation括号中,如下所示有什么区别?

是否有后果,优点,缺点是一种或另一种方式?内部2是否以程序员必须关注的方式与内部3不同?(当然,麦凯会说的不同,但问题是你是否在实践中关心).

// MyClass.m

@interface MyClass () {
    id internal2;
}
@end


@implementation MyClass {
    id internal3;
}

- (void)internalMethod {
    NSLog(@"%@ %@", internal2, internal3);
}

@end
Run Code Online (Sandbox Code Playgroud)

来源:http://www.mcubedsw.com/blog/index.php/site/comments/new_objective-c_features/

objective-c ios

5
推荐指数
1
解决办法
637
查看次数

如果我只想发送测试版,我必须将TestFlight SDK包含到我的应用程序中吗?

我发现本教程介绍了如何为TestFlight构建AdHoc IPA.但是还有TestFlight SDK,我不明白我是否需要这个以及为什么我需要这个用于简单的beta测试分发.

谁能解释一下?

iphone ipad ios testflight

5
推荐指数
1
解决办法
2217
查看次数

Apples Reachability 类是否有更复杂的替代方案?

Apple 已经创建了那个著名的 Reachability 类,但是查看代码我不太信任它。格式和标题很乱。

它也无法帮助显示“您没有互联网!” 警报。

我只想做:

  • 在某些时候下载一个 XML。

  • 当没有互联网时,显示警报。

  • 当下载 XML 时 Internet 断开连接,显示警报。

在我的应用程序中,用户没有点击下载按钮,这一切都在后台自动发生。

就是这样。真的。我现在在 Reachability 上花了 3 个小时,我的大脑拒绝了它。

有人用干净的标题和干净的代码创建了一个聪明的替代方案吗?使用起来非常简单的东西?

iphone cfnetwork reachability ipad ios

5
推荐指数
1
解决办法
1529
查看次数

如何围绕Y轴旋转相对于用户如何握住设备?

我记得WWDC上有一个谈话,显示OpenGL ES中的茶壶,随着设备的移动而旋转.看来茶壶在太空中静止不动.

当应用程序启动时,茶壶开始处于特定位置.然后当设备旋转时,茶壶也旋转到空间静止不动.

在这次演讲中,他们提到我们必须获得"参考框架",例如在应用程序启动时,它告诉我们用户最初如何持有设备.

例如,这里是加速度计轴:

加速度计

我想知道围绕Y轴的旋转,但是相对于用户如何握住设备.因此,当用户将其保持直立并围绕Y旋转时,我需要知道旋转值.

我认为关键是从读数中消除重力?另外我的目标是带有陀螺仪的iPhone 4/4S,但我认为CoreMotion会自动对它们进行传感器融合.

我怎么能弄清楚用户围绕Y轴旋转设备的程度?

iphone accelerometer ios gyroscope core-motion

5
推荐指数
1
解决办法
2735
查看次数

如何为CABasicAnimation设置颜色?

CABasicAnimation具有期望id的toValue属性.但是Quartz Core不能与UIColor一起使用,它需要一个CGColor结构.我如何为CABasicAnimation提供颜色?

iphone core-animation cabasicanimation ipad ios

5
推荐指数
1
解决办法
6213
查看次数

是否有必要在GCD中的ARC下创建自动释放池?

我有一个CAEAGLLayer的运行循环方法,它使用GCD序列化对共享ivars的访问.

我的绘图代码目前是这样构造的:

- (void)draw {
    dispatch_sync(serialDrawingQueue, ^{
        @autoreleasepool {
            [self drawingStart];

            [spriteA draw];
            [spriteB draw];

            [self drawingEnd];
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

draw方法由CADisplayLink调用.@autoreleasepool我使用GCD块时是否必要?

concurrency memory-management grand-central-dispatch ios automatic-ref-counting

5
推荐指数
1
解决办法
2827
查看次数

哪里可以找到Brad Larson的iOS开发会话视频?

有人告诉我,Brad Larson在iTunes U上发布了很好的iOS开发视频.他说应该有两个类似于斯坦福大学的类.

iTunes糟糕的搜索界面似乎把我锁定在那些视频之外.我找不到他们.甚至在我搜索麦迪逊或布拉德拉森时也是如此.我也在搜索时登录...

有人能指出我正确的方向吗?也许Brad Larson自己?;-)

iphone

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

使用Core Motion可以获得更准确或更快的加速度计读数吗?

我可以使用Core Motion框架的这种方法:

- (void)startAccelerometerUpdatesToQueue:(NSOperationQueue *)queue withHandler:(CMAccelerometerHandler)handler
Run Code Online (Sandbox Code Playgroud)

作为替代

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
Run Code Online (Sandbox Code Playgroud)

UIKit的UIAccelerationDelegate方法.在那里,我必须指定更新的频率.我希望尽可能快速准确地获得加速度数据.

Core Motion是我的朋友吗?我可以从Core Motion的这种方法中获得什么样的读数?文档没有谈论它.

iphone accelerometer core-motion

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

为什么我更喜欢为每个新线程或NSOperation创建NSManagedObjectContext而不是在主线程上调用Core Data?

一些开发人员已经告诉我,我可以为每个新线程创建一个新的NSManagedObjectContext实例,以使Core Data具有线程安全性.然后我只需要照顾合并.

对我来说,这听起来像很多额外的代码和开销.

这个解决方案有什么不好的原因吗?它来了:

相反,每一个新的线程或每的NSOperation创建一个新的MOC的,我会在主线程中执行MOC-变化,就像我们从UIKit的认识.我只是打电话-performSelectorOnMainThread:...waitUntilDone:YES并摆脱所有Core Data并发问题.

优点: - 不必为每个Thread/NSOperation创建一个新的MOC. - 不必将MOC合并在一起. - 确保没有并发问题,因为Core Data保留在安全的主线程上.

缺点: - -performSelectorOnMainThread:...waitUntilDone:YES看起来像丑陋,难以阅读. - 线程/ NSOperation被阻止.但实际上,系统无论如何都不能同时做多件事.就我而言,核心数据部分不是性能瓶颈.围绕它的繁重计算是在后台线程或NSOperation中进行的.

你怎么看?这值得进一步探索吗?为什么你仍然希望为每个新的Thread/NSOperation创建一个MOC然后处理合并?与在主线程上执行此操作相比,这有什么好处?

iphone concurrency multithreading core-data ios

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

为什么复制指针以解决ARC下基于块的保留周期是有意义的?

例如,在ARC下,如果您在self块内部使用,则怀疑块会导致保留周期.

我在这里看到了一种解决方法,如下所示: 在此输入图像描述

这种解决方法如何防止保留周期?

weakRequest只是指向引用的完全相同对象的指针request.当ARC修改weakRequestor 的保留计数时request,它会影响同一个对象.

然后,在块中,有一个奇怪的事情发生:

__strong ASIHTTPRequest *strongRequest = weakRequest;
Run Code Online (Sandbox Code Playgroud)

这就是说:

ASIHTTPRequest *strongRequest = weakRequest;
[strongRequest retain];
Run Code Online (Sandbox Code Playgroud)

但同样:它是同一个对象.为什么所有这些不同的变量名?他们只是指针!

我从来没有真正关心过块,并试图避免它们.但现在这让我对每个人在谈论"一个块捕获变量"时所说的内容感到好奇.直到今天,我认为这只意味着一个块将保留您使用的每个指针,这些指针已在块的范围之外定义,这意味着该块只保留您在其范围内触摸的任何对象.

我做了这个快速测试:

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:v];
v.backgroundColor = [UIColor orangeColor];

NSLog(@"self = %p", self); // 0x6a12a40

[UIView animateWithDuration:1.5 
                      delay:0
                    options:UIViewAnimationOptionAllowUserInteraction
                 animations:^{
                     UIViewController *my = self;
                     NSLog(@"my = %p", my); // 0x6a12a40
                     v.frame = CGRectMake(200, 200, 100, 100);
                 }
                 completion:nil];
Run Code Online (Sandbox Code Playgroud)

就像你可以看到对象本身保持完全相同.该块不会创建副本.所以我可以放心地假设C和Objective-C知识的所有年份仍然有效:

ASIHTTPRequest …
Run Code Online (Sandbox Code Playgroud)

memory-management objective-c ios objective-c-blocks automatic-ref-counting

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