小编gra*_*ver的帖子

UIGraphicsBeginImageContextWithOptions和Multithreading

我有点困惑UIGraphicsBeginImageContextWithOptions和线程,因为根据UIKit函数引用 UIGraphicsBeginImageContextWithOptions应该只在主线程上调用.调用时,它会创建一个基于位图的上下文,可以使用CoreGraphics的函数或者像drawInRect:for UIImage,-drawInRect:withFont:for NSString等等方法进行操作.对于CoreGraphics的绘图,一切都很清楚 - 您传递了一个CGContextRef参数,该参数被操作到每个函数,但UIKit绘图方法使用堆栈中的当前上下文.在iOS 4.0的新功能的发行说明中写道

在UIKit中绘制图形上下文现在是线程安全的.具体来说:
- 用于访问和操作图形
上下文的例程现在可以正确处理驻留在不同线程上的上下文.
- 字符串和图像绘制现在是线程安全的.
- 现在可以安全地使用多个线程中的颜色和字体对象.

到现在为止还挺好.有趣的是我有一个项目,在那里我做一些密集的绘图并通过创建上下文来创建多个图像UIGraphicsBeginImageContextWithOptions,但是当这些操作碰巧更耗时并且我只是在后台线程中移动绘图并且在准备好显示时他们在屏幕上有一些动画,一切都很好 - 没有崩溃,没有泄漏.图像按预期绘制,似乎UIGraphicsBeginImageContextWithOptions为后台线程创建了一个上下文,一切似乎都很好.
所以我的问题是:
- 为什么有必要UIGraphicsBeginImageContextWithOptions只调用主线程,因为它似乎在后台工作正常?
- 如何使用UIImage-drawInRect:方法,例如,在后台线程中,我没有当前上下文,我似乎无法创建一个因为我不能UIGraphicsBeginImageContextWithOptions在那里调用?
- 使用UIKit方法进行背景图像处理的正确方法是什么(我知道我也可以使用CGBitmapContextCreate,但它既不会将创建的上下文推送到上下文堆栈中,也不能自己为了使用-drawInRect:方法而自行完成UIImage)?

multithreading core-graphics uikit ios

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

目标c - 参考计数

直到五分钟我才确定我对Objective c引用计数的理解非常好,但是当我开始检查对象retainCount时,我很惊讶地看到我所看到的.

例如,myViewController有一个UITableview:

.h文件

@interface RegularChatViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
     UITableView *_tableView;
}
@property (nonatomic, retain) IBOutlet UITableView *tableView; 
Run Code Online (Sandbox Code Playgroud)

.m文件

@synthesize tableView = _tableView;

- (void)loadView
{
    _tableView = [[UITableView alloc] init];  // STEP ONE
    NSLog(@"tableView retain count: %d",[_tableView retainCount]);

    self.tableView.frame = CGRectMake(0, 0, 320, tableHeight); // STEP TWO
    NSLog(@"tableView retain count: %d",[_tableView retainCount]);  

    [self.view addSubview:self.tableView]; // STEP THREE
    NSLog(@"tableView retain count: %d",[_tableView retainCount]); 
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,输入是:

tableView retain count: 1
tableView retain count: 2
tableView retain count: 3
Run Code Online (Sandbox Code Playgroud)

显然,STEP …

iphone reference-counting objective-c ios retaincount

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

如何在iOS中使用图片上传代码发布更多参数?

嗨我在php服务器上传图片,并在此代码的帮助下成功上传

- (NSString*)uploadData:(NSData *)data toURL:(NSString *)urlStr:(NSString *)_userID
{
    // File upload code adapted from http://www.cocoadev.com/index.pl?HTTPFileUpload
    // and http://www.cocoadev.com/index.pl?HTTPFileUploadSample
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:urlStr]];
    [request setHTTPMethod:@"POST"];

//    NSString*  = [NSString stringWithString:@"0xKhTmLbOuNdArY"];
    NSString *stringBoundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];


    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
//  [body appendData:[[NSString stringWithFormat:@"userId=%@",_userID] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"image%@.jpg\"\r\n", _userID] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:data]]; …
Run Code Online (Sandbox Code Playgroud)

iphone upload image-uploading ios

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

绘画应用程序与巨大的画布

我正在开发另一个带有画布的绘图应用程序,它比屏幕大很多倍.我需要一些建议/指导如何做到这一点.

基本上我想要的是滚动这个大画布,只在可见区域绘制.我在考虑两种方法:

  1. 有64x64(或其他)"瓷砖"可以绘制,然后滚动只需加载新的瓷砖.
  2. 记录所有用户笔划(点)和滚动计算指定区域,并仅使用屏幕大小的画布绘制它们.

如果这很重要,我正在使用cocos2d作为原型.

cocos2d-iphone ios

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