小编Bas*_*Bas的帖子

Core Data 不会从内存中释放 UIImage 数据 (ImageIO_PNG_Data)

我的应用程序具有呈现有关实体和 UIScrollView 的一些详细信息的视图,其中包含一些相关缩略图的 UIImageViews(全部保存在核心数据中)。当用户按下缩略图时,我获取全尺寸图像(来自核心数据)并将其呈现在 UIImageView 中。这些图像是从设备相机或相册中捕获到 Core Data 的。保存/检索 UIImage 工作正常。按照 Apple 的建议对数据进行标准化,以尽量减少在需要之前加载大对象。

很抱歉这篇很长的帖子,但想要彻底...

核心数据设置:

顶级实体是WalkthruItemWalkthruItemImage保存缩略图(可转换)和评论的一对多关系。然后将实际的全尺寸图像存储在一对一相关对象中WalkthruItemImageImage,该对象具有称为“图像”的单个可转换属性。这样做是为了防止在显示所有缩略图时加载全尺寸图像。(无法发布编辑器的图像,抱歉)只有在按下缩略图时才会加载全尺寸图像,如下面的代码所示。

问题:

当加载图像(缩略图和全尺寸)时,ImageIO_PNG_Data 永远不会被释放。曾经。即使在内存警告之后。当然,最终的崩溃完美无缺:)

我最终将这些图像加载到 UIImageView 中,然后(我认为)正确释放它们。

未发布的数据在仪器中显示为ImageIO_PNG_Data。通常它们是 14.77 MB,因为它们是由相机(5 秒)捕获的,我认为这是它们完全解压缩的大小。ImageIO_PNG_Data 对象的数量与我加载的唯一图像的数量完全匹配。稍后加载相同的图像不会增加内存占用,因此看起来是 Core Data 试图为我做一些我真的不需要的缓存。

图片加载代码:

这是响应缩略图被按下然后将其放入 UIImageView 的代码。这个案例有点做作,因为我为这个问题简化了它。通常有一个 segue 和一些花哨的 UIImageView 容器,但这种情况以更容易记录的方式显示了确切的内存问题。代码中注释掉了一些失败的修复尝试,并在下面的“我尝试过的”部分中进行了讨论:

if(viewHit.tag>-1){
        currentImageIndexForPreview = viewHit.tag;

        // this object holds the thumbnail
        DCWalkthruItemImage * itemImage = self.walkthruItem.images[currentImageIndexForPreview];

        // itemImage.image (1:1 relationship) gets the DCWalkthruItemImageImage object
        // itemImage.image.image gets the actual image data
        UIImage *image …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c uiimageview uiimage

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

在非静态成员函数中无效使用此函数

我得到了以下课程:

class Foo {
private:
    static float scale;

public:
    static float setScale(float scale);
};
Run Code Online (Sandbox Code Playgroud)

当我试图像这样实现setScale时:

float Foo::setScale(float scale) {
   this->scale = scale;
   return scale;
}
Run Code Online (Sandbox Code Playgroud)

它抛出一个错误:

在非静态成员函数之外使用'this'无效.

我真的没有得到这个,因为我的功能被标记为静态.

我看到了一些相关的问题,但它没有回答我的问题.

那么我该如何解决这个问题呢?我知道我可以更改名称而不使用this但是可能有一个解决方案吗?

编辑:当我在类中实现该函数时,它仍然会抛出相同的错误.

c++

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

无法为扩展方法UIAlertController提供参数值

我正在尝试编写一个扩展方法,根据您作为参数提供的内容生成UIAlertController.

extension UIAlertController {
   func generate(messageText: String, messageTitle: String, buttonText: String) {
       let alert = UIAlertController(title: messageTitle, message: messageText, preferredStyle: UIAlertControllerStyle.Alert)
       alert.addAction(UIAlertAction(title: buttonText, style: UIAlertActionStyle.Default, handler: nil))
       self.presentViewController(alert, animated: true, completion: nil)
   }
}
Run Code Online (Sandbox Code Playgroud)

这不会给出错误.

但是当我尝试调用它并添加参数值时

var alertTest = UIAlertController.generate("")
Run Code Online (Sandbox Code Playgroud)

它给出以下错误: Type 'UIAlertController' does not conform to protocol 'StringLiteralConvertible'

我怎样才能解决这个问题?

或者我不想实现什么?

swift uialertcontroller

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

如何在swift中设置数组起始和结束索引?

我试图在操场上创建一个1-100个元素的数组,但是当我试图打印它时不会打印数组中的值.

码:

var ab:Array = [1...100]

for i in ab {
    print(i)
}
Run Code Online (Sandbox Code Playgroud)

输出: 在此输入图像描述

但是在操场上它没有显示任何错误.我做错了什么吗?谢谢

arrays swift swift-playground

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

默认情况下是公共,私人或内部的类

当我宣布一个班级时:

class foo {
    //code goes here
}
Run Code Online (Sandbox Code Playgroud)

是班级标准public,private还是internal?我对此感到疑惑,但无法找到有关它的任何信息.

class swift

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

按下C#XNA后检查是否释放了一个键

我得到了一些代码来检查玩家是否按下某个键.当玩家按下空格键时,精灵会上升.但我正试图在释放钥匙时将精灵设置回地面.这是我提出的代码:

keystate = Keyboard.GetState();
if (keystate.IsKeyDown(Keys.Right))
     playerPosition.X += 2.0f;
else if (keystate.IsKeyDown(Keys.Left))
     playerPosition.X -= 2.0f;
else if (keystate.IsKeyDown(Keys.Space))
{
   if (keystate.IsKeyDown(Keys.Space))
       playerPosition.Y -= 6.0f;
   else if (keystate.IsKeyUp(Keys.Space))
        playerPosition.Y += 6.0f;
}
Run Code Online (Sandbox Code Playgroud)

当没有按空格键时,我不希望精灵被移动.任何解决方案将不胜感激?

编辑:精灵确实向上移动,但永远不会下降!

c# xna

0
推荐指数
1
解决办法
4427
查看次数

你不能在类中使用静态方法/变量的原因是什么

我想知道为什么你不能static在课堂上使用关键字.我知道你可以在一个struct但不在一个中使用它有class
没有人知道他们为什么选择这个?如果是这样的话,有什么好处可以放手static

static swift

0
推荐指数
1
解决办法
977
查看次数