我的应用程序具有呈现有关实体和 UIScrollView 的一些详细信息的视图,其中包含一些相关缩略图的 UIImageViews(全部保存在核心数据中)。当用户按下缩略图时,我获取全尺寸图像(来自核心数据)并将其呈现在 UIImageView 中。这些图像是从设备相机或相册中捕获到 Core Data 的。保存/检索 UIImage 工作正常。按照 Apple 的建议对数据进行标准化,以尽量减少在需要之前加载大对象。
很抱歉这篇很长的帖子,但想要彻底...
核心数据设置:
顶级实体是WalkthruItem与WalkthruItemImage保存缩略图(可转换)和评论的一对多关系。然后将实际的全尺寸图像存储在一对一相关对象中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) 我得到了以下课程:
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但是可能有一个解决方案吗?
编辑:当我在类中实现该函数时,它仍然会抛出相同的错误.
我正在尝试编写一个扩展方法,根据您作为参数提供的内容生成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'
我怎样才能解决这个问题?
或者我不想实现什么?
我试图在操场上创建一个1-100个元素的数组,但是当我试图打印它时不会打印数组中的值.
码:
var ab:Array = [1...100]
for i in ab {
print(i)
}
Run Code Online (Sandbox Code Playgroud)
但是在操场上它没有显示任何错误.我做错了什么吗?谢谢
当我宣布一个班级时:
class foo {
//code goes here
}
Run Code Online (Sandbox Code Playgroud)
是班级标准public,private还是internal?我对此感到疑惑,但无法找到有关它的任何信息.
我得到了一些代码来检查玩家是否按下某个键.当玩家按下空格键时,精灵会上升.但我正试图在释放钥匙时将精灵设置回地面.这是我提出的代码:
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)
当没有按空格键时,我不希望精灵被移动.任何解决方案将不胜感激?
编辑:精灵确实向上移动,但永远不会下降!
我想知道为什么你不能static在课堂上使用关键字.我知道你可以在一个struct但不在一个中使用它有class
没有人知道他们为什么选择这个?如果是这样的话,有什么好处可以放手static?