我restrict对此有一个大致的了解,但我希望澄清一些细节.我有一个函数从一个缓冲区读取一个以null结尾的字符串,并在另一个缓冲区中写出一个URL编码的版本.该函数具有此签名(当前没有restrict):
char const *StringUrlEncode(char const *unencoded,
char *encoded,
char *encodedEnd);
Run Code Online (Sandbox Code Playgroud)
unencoded是我的以null结尾的源字符串.目标缓冲区由encoded和表示encodedEnd,其中encoded指向char缓冲区encodedEnd中的第一个并指向缓冲区后的第一个字符,即函数将写入char但不包括指向的位置encodedEnd- 这是您的基本begin/ end迭代器如果您熟悉C++ STL约定,请配对.
如果我添加restrict到此函数,它应该只应用于前两个参数:
char const *StringUrlEncode(char const *restrict unencoded,
char *restrict encoded,
char *encodedEnd);
Run Code Online (Sandbox Code Playgroud)
或者通过将它添加到所有三个参数中我是否有一些好处?
我可以看到制作输入和输出缓冲区restrict有助于编译器知道它们不重叠.但是由于最后一个参数,encodedEnd仅用于标记输出缓冲区的结尾,我认为这restrict对编译器没有任何帮助(虽然我认为它不会受到伤害,除了添加不必要的噪声到函数声明).
我一直在尝试使用<canvas>标签绘制简单的图表和图表,到目前为止,它很容易使用.我想到了一个问题.我无法弄清楚如何<canvas>在Safari中绘制文本.在Firefox 3.0中,我可以这样做:
Chart.prototype.drawTextCentered = function(context, text, x, y, font, color) {
if (context.mozDrawText) {
context.save();
context.fillStyle = color;
context.mozTextStyle = font;
x -= 0.5 * context.mozMeasureText(text);
context.translate(x, y);
context.mozDrawText(text);
context.restore();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看到fillText()了Apple的Safari文档中的方法,但它似乎在Safari 3.2中不受支持.这只是目前缺失的东西,还是一些保密的秘密?
我正在开发一款iPhone应用程序,我们在初始版本中使用英语和日语进行本地化.我们经常调用NSLocalizedString()加载适当的本地化字符串进行显示.通常情况下,将本地化字符串保存在实例变量中是为了下次我们需要它们,或者我是否在这里进行微优化,我是否应该在每次需要时重新加载字符串?
我有一个从NIB加载的UIImageView.我已经连接了一个手势识别器来处理水龙头,但是当我运行应用程序时,没有检测到水龙头.
iphone cocoa-touch interaction gesture-recognition uiimageview
我正在研究iPhone应用程序,我希望能够检查手机是否能够拨打电话(如果没有,则警告用户).这可能是由于没有可用的蜂窝服务或用户将电话置于"飞行模式".
我查看了Apple的文档,我找不到任何可以让我查看的内容.我错过了什么,或Apple没有将此信息公开给应用程序?
编辑:只是要强调,我对检查IP网络连接不感兴趣,但想确定我的应用是否可以拨打电话.
我得到这些奇怪的错误,但我不理解它们.以下是错误:
错误:可能无法初始化变量大小的对象(#1)
错误:静态分配的Objective-C类实例'笑话'(#1)
错误:静态分配的Objective-C类实例'笑话'(#1)
错误:无法转换为指针类型(#2)
(注意:错误后面的数字将指示错误在我的实现文件中的位置)
这是我的.m文件:
#import "Joke.h"
@implementation Joke
@synthesize joke;
@synthesize rating;
- (id)init {
[super init];
return self;
}
- (void)dealloc {
[joke release];
[super dealloc];
}
+ (id)jokeWithValue:(NSString *)joke {
Joke j = [[Joke alloc] init]; // (# 1) This is where #1 errors occurred
j.joke = joke;
return [j autorelease]; // (# 2) This is where #2 errors occurred
}
@synthesize joke;
@synthesize rating;
@end
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个小程序来测试传入和传出函数的char*指针.当我用cc编译时,我得到警告和错误,说我有相互冲突的类型,即使我的所有变量都是char*.请指教
#include <stdio.h>
main()
{
char* p = NULL;
foo1(p);
foo2();
}
void foo1(char* p1)
{
}
char* foo2(void)
{
char* p2 = NULL;
return p2;
}
p.c:11: warning: conflicting types for ‘foo1’
p.c:7: warning: previous implicit declaration of ‘foo1’ was here
p.c:15: error: conflicting types for ‘foo2’
p.c:8: error: previous implicit declaration of ‘foo2’ was here
Run Code Online (Sandbox Code Playgroud) cocoa-touch ×4
iphone ×4
c ×2
pointers ×2
c99 ×1
canvas ×1
cocoa ×1
function ×1
interaction ×1
javascript ×1
objective-c ×1
safari ×1
uiimageview ×1