小编Tim*_*ddy的帖子

自动引用计数(ARC)表示禁止调用[super dealloc] ...有什么替代方案?

我开始使用iOS5,我已经为我的项目启用了ARC.我有一个类在deallocation我保存该对象的状态.

-(void)dealloc {
    [self save];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

但是,在ARC下,[super dealloc]是不允许的?如果在这种情况下你没有在超类上调用dealloc方法,我认为它被认为是一个错误?

那么现在解除对象的适当方法是什么?

objective-c ios5 automatic-ref-counting

26
推荐指数
1
解决办法
9356
查看次数

在ARC下,是否仍然建议为循环创建一个@autoreleasepool?

假设我有一个返回一堆自动释放的NSData对象的循环...

NSData* bigData = ...
while(some condition) {
    NSData* smallData = [bigData subdataWithRange:...];
    //process smallData
}
Run Code Online (Sandbox Code Playgroud)

在ARC下,我是否仍然应对@autoreleasepool这种while情况?

NSData* bigData = ...
@autoreleasepool {
    while(some condition) {
        NSData* smallData = [bigData subdataWithRange:...];
        //process smallData
    }
}
Run Code Online (Sandbox Code Playgroud)

我之所以问的原因是我看到我的NSData对象通过屋顶的工具中的生活分配数量调用dataWith...方法而不是initWith...方法.当我使用时initWith...,生活分配数量要少得多.

initWith...尽可能选择方法更好吗?

memory-management objective-c nsautoreleasepool automatic-ref-counting

19
推荐指数
3
解决办法
5583
查看次数

什么!! 在objective-c语法中意味着什么?

我发现了一些类似于以下的代码:

BOOL hasValue_:1;

- (BOOL) hasValue {
    return !!hasValue_;
}

- (void) setHasValue:(BOOL) value {
    hasValue_ = !!value;
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么双重感叹号是必要的?我们还没有将BOOL传递给方法并返回BOOL吗? BOOL真的是int的typedef吗?

谢谢!

编辑
感谢迄今为止的所有回复.我明白使用!! 与其他数据类型有效地执行一些类型转换为布尔结果.但是,在上面的例子中,我已经严格使用BOOL了.

编辑
如果我已经使用BOOL,为什么有必要将其标准化为0表示假,1表示真实?BOOL不能保证0为假,其他一切都是真的吗?

objective-c

17
推荐指数
1
解决办法
3950
查看次数

简化 AWS SDK GO v2 测试/模拟

Amazon 有一篇非常有用的文章,描述了如何对AWS SDK Go v2 进行单元测试。我理解他们放弃 v1 API 单元测试的“旧”方式的动机,我认为这与CodeReviewComment一致。

然而,我遇到了一种对我造成严重破坏的情况。

假设我正在打电话s3.HeadObject(),如果满足某些任意条件,我就会打电话s3.GetObject()。因此,我设计了我的 API,以便我可以分别为每个操作创建客户端 API(在pseudoGo 中)。

type HeadObjectAPIClient interface {
    HeadObject(ctx context.Context, params *s3.HeadObjectInput, optFns ...func(*s3.Options)) (*s3.HeadObjectOutput, error)
}

func GetHeadObject(api HeadObjectAPIClient, params...) (*s3.HeadObjectOutput, error) {
    /* setup logic */
    return api.HeadObject( /* params */ )
}

type GetObjectAPIClient interface {
    GetObject(ctx context.Context, params *s3.GetObjectInput, optFns ...func(*s3.Options)) (*s3.GetObjectOutput, error)
}

func GetObject(api GetObjectAPIClient, params...) (*s3.GetObjectOutput, error) {
    /* setup logic */
    return api.GetObject( /* …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocking go aws-sdk-go-v2

13
推荐指数
0
解决办法
4013
查看次数

使用Swift iOS导入类

我正在尝试Swift,我遇到了一些麻烦..我有一个TableViewController.swift和一个DataModel.swift,但我不知道如何将DataModel类导入到TableViewController中以便在其中使用.我正在尝试

import DPBDataModel.swift  
Run Code Online (Sandbox Code Playgroud)

但它不起作用(没有这样的模块)

谢谢你的回复!

swift

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

这是多态性的恰当用途吗?

考虑这个语法正确的(?)伪代码:

class Event {
public:
    virtual int getID() const = 0;
    virtual int getSize() = 0;
    virtual void* getData() = 0;
    virtual void setData() = 0;
    //(I cannot define data at this level 'cos I don't know what it is yet)
}

class SpecialEvent : class Event {
public:
    virtual int getPGNID() const = 0;
    int getSourceAddress() {return source_address;}
    int setSourceAddress(int source_address) {this->source_address = source_address;}
protected:
    int source_address;
}

template <typename T, typename E>
class EventWrapper : public E { …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism

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

将CGContext复制到另一个CGContext中

我正在为我为MKMapOverlayView创建的CGContext执行一些CG绘图操作.在绘制到我的上下文后,我创建了一个图像并将其粘贴到MapKit提供的上下文中.

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
    CGColorSpaceRef colorRef = CGColorSpaceCreateDeviceRGB();
    CGContextRef myContext = CGBitmapContextCreate(NULL, kTileSize, kTileSize, 8, 0, colorRef, kCGImageAlphaPremultipliedLast);
    CGColorSpaceRelease(colorRef);
    CGContextSetAllowsAntialiasing(myContext, TRUE);
    //...cut out drawing operations...
    CGImageRef image = CGBitmapContextCreateImage(myContext);
    CGContextDrawImage(context, [self rectForMapRect:mapRect], image);
    CGImageRelease(image);
    CGContextRelease(myContext);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法简单地复制myContextcontext无需创建图像?

我意识到你们中的一些人会说"为什么不直接画入MapKit提供的上下文".不幸的是,我们在context直接渲染时遇到了绘图故障.Apple目前正在为我们调查这个问题,但与此同时我们需要找到一个解决方法.我上面介绍的这种解决方法是我的"最佳"镜头,但它有点慢.

PS我已经开始了赏金,因为我也在寻找答案.具体来说,我的目标是OS X.所以答案应该在那里工作.OP正在寻找iOS上的答案.

core-graphics objective-c cgcontext swift

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

谁应该在iOS应用程序中拥有Dependency Injected对象?

对于经验丰富的iOS开发人员来说,这可能是一个基本问题,但是来自Java背景,我们有许多依赖注入(DI)好东西(即Spring),我在确定谁应该拥有DI对象时遇到一些麻烦.不幸的是,我发现自己创造了一堆单身人士,这对于管理变得非常讨厌.

例如,我们有一些Configuration其他类想要访问的.目前我们只有一个Configuration的单例实例,这使得测试有点困难.从技术上讲,我们使用OCMock中的方法调配来克服这个问题.

在Java/Spring中,有一些容器可以创建/拥有这些对象.在iOS中,我认为我对容器最接近的是UIApplication和UIApplicationDelegate.这些东西是否有意义创建/拥有最终会被注入其他对象的这些对象?

如果是这样,访问这些对象的适当策略是什么?例如,在UIApplication或UIApplicationDelegate上创建一个类别来访问这些对象,如: [[UIApplication sharedApplication] configuration][[[UIApplication sharedApplication] delegate] configuration]

dependency-injection objective-c

10
推荐指数
2
解决办法
2117
查看次数

Hibernate可以通过配置在读取/插入时自动大写一列吗?

我们有一些数据列必须始终为大写以确保唯一性.我想知道hibernate是否可以通过一些配置文件更改强制所有这些列为大写?

我们实际上使用自定义UserType来加密/解密其他一些表的列数据,但我认为仅仅为了大写所有内容都是过度的...

或者,我正在考虑修改模型,以便所有getter/setter都将大写任何来来往往的字符串.

最糟糕的(?)情况是修改Oracle列约束以在检查唯一性时忽略大小写.

有什么想法吗?

oracle orm hibernate

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

iOS 11与VectorKit和Texture2D崩溃

由于iOS 11已经推出(11.0到11.0.3),我们已经遇到了这些崩溃.我只能假设在地图视图或地图图块被销毁时发生了这些崩溃.但是,我们无法在内部重现问题.冰球正在报道这次事故.

鉴于此崩溃总是在线程0(即主线程)上,我们不确定从哪里开始调查.对于与主线程上的设置和拆卸相关的任何UI都是"正常的",并且没有任何崩溃的堆栈帧包含对我们编写的代码的引用.

有没有人遇到Texture2Ddealloc的崩溃?

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0xbadd9a85ba4fbebd
Crashed Thread:  0

Thread 0 Crashed:
0   VectorKit                            0x0000000193c6b744 ggl::Texture2D::~Texture2D() + 92
1   libc++.1.dylib                       0x0000000183456f64 std::__1::__shared_weak_count::__release_shared() + 68
2   VectorKit                            0x0000000193d33bf0 -[VKRasterTile .cxx_destruct] + 168
3   libobjc.A.dylib                      0x000000018349eef4 object_cxxDestructFromClass(objc_object*, objc_class*) + 144
4   libobjc.A.dylib                      0x00000001834ac638 objc_destructInstance + 84
5   libobjc.A.dylib                      0x00000001834ac690 object_dispose + 12
6   VectorKit                            0x0000000193c3e1e8 -[VKTile dealloc] + 64
7   VectorKit                            0x0000000193c49fa4 -[VKRasterTile dealloc] + 72
8   VectorKit                            0x0000000193e51f80 __destroy_helper_block_.216 + 36
9   libsystem_blocks.dylib …
Run Code Online (Sandbox Code Playgroud)

mapkit ios11

8
推荐指数
1
解决办法
1005
查看次数