小编Rob*_*nes的帖子

为什么Objective-C不支持私有方法?

我已经看到了一些在Objective-C中声明半私有方法的策略,但似乎没有办法制作一个真正的私有方法.我接受.但是,为什么会这样呢?我基本上所说的每一个解释,"你不能这样做,但这里有一个近似的近似."

有许多适用于关键字的ivars(部件)控制它们的范围,例如@private,@public,@protected.为什么不能这样做呢?它似乎是运行时应该能够支持的东西.我缺少一种潜在的哲学吗?这是故意的吗?

objective-c objective-c-runtime

122
推荐指数
5
解决办法
2万
查看次数

我应该如何处理Objective-C中init:方法的失败?

假设我正在为Objective-C中的iPhone构建一个新类.在我的一个init方法中,我想手动分配一些内存.所以,我可能有这样的事情:

- (id)initWithSomeObject:(SomeObject *)someObject {
  self = [super init];
  if (self != nil) {
    myObject = someObject;
    [myObject retain];
    if ( (memory = calloc(1, sizeof(SomeStruct)) == NULL) {
      // What should I do here to clean up
      [self release];
      self = nil;
    }
  }
  return self;
}
Run Code Online (Sandbox Code Playgroud)

现在,假设calloc()可能失败,并且无法分配内存对我的对象来说是灾难性的,我应该在if-body内做什么来正确清理?是否存在我应该使用的Objective-C习语或模式?

编辑:我收录了Rob Napier发布的代码.但是,我还是要释放myObject,对吧?或者添加的代码是否以某种方式触发dealloc()?

iphone objective-c cocoa-design-patterns

24
推荐指数
1
解决办法
3428
查看次数

从Emacs转换到Xcode的提示

我是一名开发人员,正在从Linux/Emacs过渡到OSX/Xcode.有没有人有任何关于平滑文本编辑过渡的提示或建议?特别:

Emacs的习惯在转换时引起了最大的痛苦,即你是否因为Emacs背景而反复出现了什么错误?

有没有办法使Xcode的工作方式相似,还是需要改变行为?

你有没有从Emacs中得到的任何你无法进入Xcode的东西?

我最感兴趣的是它的文本编辑器部分,例如键绑定,分割窗口,在缓冲区之间移动等等......我从未在IDE意义上使用过Emacs.它总是一个纯文本编辑器给我.编译发生在另一个shell中.同样适用于SCM的东西.

macos emacs xcode

22
推荐指数
1
解决办法
9689
查看次数

Xcode 4.5自动更改.xib文件

自从我升级到Xcode 4.5后,我发现它会自动删除我访问的每个xib文件的一部分.这是部分:

<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
        <real value="1536" key="NS.object.0"/>
</object>
Run Code Online (Sandbox Code Playgroud)

我几乎可以忍受这个,但当我再次访问该文件时,我发现还有更多的"自动"更改.它们更加多样化,更难以描述,因此除非我真的需要,否则我不会包含示例.

我不明白这里发生了什么.我正在寻找两个答案之一:

  1. 有没有办法禁用它?
  2. 为什么会发生这种情况,是否有某种方法可以强制Xcode将这些更改应用到所有xib文件中,这样我就可以完成这项工作了?

如果我只是明白到底发生了什么以及为什么,我会感觉好多了.

xib xcode4.5

10
推荐指数
1
解决办法
825
查看次数

在Objective-C中,+ alloc如何知道要分配多少内存?

假设我有一个类声明为:

@class SomeClass

@interface SomeClass: NSObject {
  NSString *myString;
  NSString *yourString;
}

@end
Run Code Online (Sandbox Code Playgroud)

后来,在其他一些代码中我说:

SomeClass *myClass = [[SomeClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

SomeClass如何知道要分配多少内存,因为它没有覆盖+ alloc?据推测,它需要存储ivars myString和yourString,但它使用的是继承自NSObject的+ alloc.是否有参考资料涵盖这些细节?

memory-management objective-c

9
推荐指数
1
解决办法
1816
查看次数

关于在iPhone上加速OpenGL ES 1.1的建议

我正在开发一款严重依赖OpenGL的iPhone App.现在它在iPhone 3G上运行有点慢,但在新的32G iPod Touch上看起来很快.我认为这与硬件有关.无论如何,我想让iPhone的性能与iPod Touch的性能相似.我相信我在OpenGL中做了很多次优化的事情,我想知道哪些改进会给我带来最大的好处.

我的场景渲染是这样的:

  • 重复35次
    • glPushMatrix
    • glLoadIdentity
    • glTranslate
    • 重复7次
      • glBindTexture
      • glVertexPointer
      • glNormalPointer
      • glTexCoordPointer
      • glDrawArrays(GL_TRIANGLES,...)
    • glPopMatrix

我的顶点,法线和纹理坐标已经交错.

那么,我应该采取什么措施加快速度呢?你先做什么步骤?

我的第一个想法是使用Texture Atlas消除所有那些glBindTexture()调用.

一些更有效的矩阵运算怎么样?我理解gl*()版本效率不高.

维多利亚州立大学呢?

更新

有8260个三角形.纹理大小为64x64 png.有58种不同的纹理.

我没有运行乐器.

更新2

在iPhone 3G上运行OpenGL ES仪器后,我发现我的Tiler利用率在90-100%范围内,我的渲染利用率在30%范围内.

更新3

纹理图集对问题没有明显的影响.使用范围仍然如上所述.

更新4

将我的Vertex和Normal指针转换为GL_SHORT似乎可以提高FPS,但Tiler利用率在很多时候仍然在90%的范围内.我仍在使用GL_FLOAT作为纹理坐标.我想我可以将它们击倒到GL_SHORT并为每个顶点节省四个字节.

更新5

将我的纹理坐标转换为GL_SHORT会产生另一个性能提升.我现在一直都超过30 FPS.Tiler利用率仍然在90%左右,但经常在70-80%的范围内下降.渲染器利用率徘徊在50%左右.我想这可能与从GL_TEXTURE矩阵模式缩放纹理坐标有关.

我还在寻求其他改进.我想接近40 FPS,因为这就是我的iPod Touch所带来的,它在那里如丝般顺滑.如果有人还在关注,我还能选择哪些其他低调的水果?

iphone opengl-es

9
推荐指数
1
解决办法
4813
查看次数

当有许多重复顶点时,glDrawElements()比glDrawArrays()更有效吗?

我试图从我的iPhone OpenGL ES应用程序中挤出一些性能提升.根据Instruments的说法,我的贴片机使用率在大多数情况下接近100%,我的FPS大约是24.我想让我的FPS达到30以上.我可以通过将GL_FLOAT转换为GL_SHORT来达到目标​​,但是对我来说,技术问题相当令人生畏.我宁愿不去那里.

所以,我正在考虑从glDrawArrays()切换到glDrawElements().我有35个网格由708个顶点组成,但很多这些顶点在面之间共享.我是纹理贴图,但网格颜色大致均匀.需要特殊纹理的面将保留原样.

假设我可以将顶点数减少一半.让我们也说我也以对iPhone有意义的方式组织我的几何:比如说,使用Imagination Technologies PVRTTriStrip工具.忽略索引数组的少量额外内存,这意味着我大致将内存带宽减少了一半,所以我应该看到相当不错的性能提升.

这是真的,还是我错过了或误解了什么?建议表示赞赏.

iphone opengl-es

9
推荐指数
1
解决办法
5258
查看次数

是否需要在Objective-C中覆盖+ alloc?

根据这个问题的一些答案,似乎+ alloc在Objective-C中为一个对象的实例分配内存做了一些幕后魔术.是否需要覆盖+ alloc?

memory-management objective-c

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

Crashlytics是否为iOS崩溃日志提供CPU线程状态?

我在门户网站上找不到此信息,也无法在其知识库中找到任何信息.如果真的失踪了,这似乎是一个相当大的盲点.

ios crashlytics

5
推荐指数
0
解决办法
90
查看次数

什么是DOT3照明?

我的问题的答案表明DOT3照明可以帮助OpenGL ES渲染,但我很难找到DOT3照明的合适定义.

编辑1

iPhone相关信息非常感谢.

iphone opengl-es opengl-es-lighting

2
推荐指数
1
解决办法
2550
查看次数