小编Mor*_*ess的帖子

ARC和桥接演员

有了ARC,我不能再投CGColorRefid.我了解到我需要做一个桥接演员.据clang docs说:

一个桥接投是C样式转换标注有三个关键字之一:

(__bridge T) op将操作数强制转换为目标类型T.如果T 是可保留对象指针类型,则op必须具有不可保留的指针类型.如果T是不可保留的指针类型,则op必须具有可保留的对象指针类型.否则演员阵容不合理.没有所有权转让,ARC不会保留任何保留操作.

(__bridge_retained T) op将必须具有可保留对象指针类型的操作数强制转换为目标类型,该目标类型必须是不可保留的指针类型.ARC保留该值,取决于对本地值的通常优化,并且接收方负责平衡+1.

(__bridge_transfer T) op将操作数(必须具有不可保留的指针类型)强制转换为目标类型,该目标类型必须是可保留的对象指针类型.ARC将在封闭的完整表达式的末尾释放值,这取决于对本地值的通常优化.

为了将对象传入和传出ARC控制,需要这些演员表; 请参阅有关可保留对象指针转换一节的基本原理.

纯粹使用__bridge_retained__bridge_transfer铸造来说服ARC分别发出不平衡的保留或释放,这种形式很差.

我会在什么样的情况下使用它们?

例如,CAGradientLayer有一个colors接受CGColorRefs 数组的属性.我的猜测是我应该__brige在这里使用,但究竟为什么我应该(或不应该)不清楚.

objective-c type-conversion clang automatic-ref-counting

165
推荐指数
3
解决办法
8万
查看次数

让UIView通过触摸事件?

有没有办法让UIView无响应并通过所有触摸事件?基本上我只想在其他UIViews上显示图形而不阻止触摸事件.

cocoa-touch uiview ios

44
推荐指数
1
解决办法
3万
查看次数

故事板 - 设置代表

在故事板之前,我只需将插座拖到课堂上即可设置代理和数据源.有了故事板,我无法将插座拖到另一个视图控制器; 没有目的地会响应它.

如果我单击一个视图控制器对象,我可以在底部看到类所有者,但是一旦我选择了另一个包含插座的视图控制器,旧选择就消失了,所以我无法连接这两个.

这种Apple的方式是说我们只应该以编程方式连接它们吗?

xcode delegates ios xcode4 uistoryboard

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

初始化属性,点符号

在我的init方法中使用点表示法将retain属性初始化为nil是不是一个坏主意?

对于像这样的普通房产:

@property (nonatomic, retain) id foo;
Run Code Online (Sandbox Code Playgroud)

在我设置的init方法中说self.foo = nil.合成的方法首先释放或自动释放foo(不完全确定潜在的实施).被fooguaranted第一setter或getter调用之前是零?或者它会指向随机垃圾,除非我明确设置foo = nil没有点符号?

initialization properties reference-counting objective-c dealloc

20
推荐指数
1
解决办法
1万
查看次数

故事板/ XIB和本地化最佳实践

正式推荐的方法进行XIB /故事板的定位是创造的.xib和.storyboard文件内xx.lproj(其中xx是两个字母的语言ID)为您想支持的每个本地化.

这会产生一个问题,因为您有多个文件在很多情况下共享相同的UI,这些文件很容易发生变化.如果您想为一个视图重新设计UI,则必须多次执行(更糟糕的是,如果您在xib中输入了可本地化的字符串值).这与DRY原则背道而驰.

NSLocalizedString()在您需要的地方打电话似乎更有效率,只需使用一个XIB或Storyboard进行一次基本本地化.

那么,为什么(不)我创建本地化的XIB/Storyboard文件?

xcode localization xib

20
推荐指数
2
解决办法
7427
查看次数

将单个值分配给多个变量

我想在一个语句中为所有声明的值赋值0.

char r, g, b = 0;
Run Code Online (Sandbox Code Playgroud)

以上仅指定0到b但不指定其他变量

c

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

获取UIGestureRecognizer的UITouch对象

有没有办法让UITouch对象与手势相关联?UIGestureRecognizer似乎没有任何方法.

cocoa-touch objective-c uitouch uigesturerecognizer ios

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

使用内置CoreData选项在外部位置存储blob

我有托管具有图像属性的对象.由于在CoreData中存储大blob是一个坏主意,我正在尝试使用内置的CoreData选项" Store in External Record File ",您可以在Data Model Inspector中看到它.

尽管启用了此选项,但我看不到任何外部存储的图像数据.从大小来看,似乎它们仍然保存在sqlite文件中.有什么问题?

blob core-data ios

13
推荐指数
1
解决办法
4767
查看次数

使用CGContextDrawImage旋转图像

如何旋转CGContextDrawImage()中心绘制的图像?

drawRect:

CGContextSaveGState(c);

rect = CGRectOffset(rect, -rect.size.width / 2, -rect.size.height / 2);
CGContextRotateCTM(c, angle);
CGContextDrawImage(c, rect, doodad.CGImage);
CGContextRotateCTM(c, -angle);
CGContextTranslateCTM(c, pt.x, pt.y);

prevRect = rect;

CGContextRestoreGState(c);
Run Code Online (Sandbox Code Playgroud)

我在原点绘制图像,然后在中心旋转图像,然后转换到应该绘制的位置.不工作.

core-graphics cgcontext cgaffinetransform ios cgcontextdrawimage

11
推荐指数
2
解决办法
8926
查看次数

顺时针旋转UIImageView

这应该很简单,但我无法旋转UIImageView360度,永远重复.

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveLinear | UIViewAnimationOptionBeginFromCurrentState animations:^{
    self.reloadButton.imageView.transform = CGAffineTransformRotate(self.reloadButton.imageView.transform, -M_PI);
} completion:^(BOOL finished) {

}];
Run Code Online (Sandbox Code Playgroud)

根据文档,我传递的角度的符号CGAffineTransformRotate确定旋转方向,但上面的代码逆时针旋转.与...相同M_PI.

以弧度表示的角度,此矩阵旋转坐标系轴.在iOS中,正值指定逆时针旋转,负值指定顺时针旋转.在Mac OS X中,正值指定顺时针旋转,负值指定逆时针旋转.

transform core-graphics objective-c cgaffinetransform ios

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