我认为objective-c中的变量只是对内存中某个对象的引用.所以对于我的理解,结果必须是"一",因为最后我将str1的对象的内存地址分配给str2,之前我已经分配了str2的内存地址来测试.
NSString *str1 = [NSString stringWithCString:"one"];
NSString *str2 = [NSString stringWithCString:"two"];
test = str2; // test is an instance variable. I use no getter/setter here! just for testing!
str2 = str1;
NSLog(test); // = "two" ??
Run Code Online (Sandbox Code Playgroud) 据我所知,只有"方便"方法返回带有-autorelease的创建对象,因此接收者不负责该对象的内存.但是因为Apple说当你使用一个名为"new","alloc","create"或"copy"的方法时,你负责释放方法返回的对象,我认为这些方法应该不 - 自动释放这些物体.否则它们将是"方便的",并且只要他没有 - 获得所接收的物体,接收者将根本不负责任.我做对了吗?
这是一个月前我正在读一条关于那条线的.我不确定,但我认为如果我调用self.myInstanceVariable然后它会自动使用getter/setter,但是如果我直接调用myInstanceVariable = @"Foo",那么我会绕过任何getter/setter ,真的,非常糟糕.正确错误?
编辑:我在XCode中试过这个.
实现如下:
@implementation Test
@synthesize name;
+ (Test*)testWithName:(NSString*)name {
    Test* test = [self alloc];
    test.name = name;
    return [test autorelease];
}
- (void)setName:(NSString*)newName {
    NSLog(@"SETTER CALLED!!");
    if(name != newName) {
        [name release];
        name = [newName retain];
    }
}
- (NSString*)name {
    NSLog(@"GETTER CALLED!!");
    return name;
}
- (void)doWrongThing {
    NSString *x = name;
    NSLog(@"doWrongThing: %@", x);
}
- (void)doRightThing {
    NSString *x = self.name;
    NSLog(@"doRightThing: %@", x);
}
Run Code Online (Sandbox Code Playgroud)
测试代码看起来像这样:
Test *t = [Test testWithName:@"Swanzus Longus"];
//NSLog(@"%@", …Run Code Online (Sandbox Code Playgroud) 我正在为UIScrollView实现一个数据源对象.是控制器的一部分,还是模型的一部分?我认为控制器,但不确定.它提供数据.但是数据可能来自网络中的sqlite3文件.所以实际上我会说它不是来自数据部分,因为它应该灵活到数据来源.你怎么看?
昨天我在我的设备上做了很多测试.突然,当我在Xcode中点击Build&Go时,我收到此错误消息.首先,它询问我是否可以使用我的密钥签名.我单击是,然后出现该错误消息.我的iPod像往常一样连接,iTunes自动启动,我关闭它以防止中断.
我尝试重启Xcode.没有帮助.我的Apple Dev Enrollment是全新的.知道问题可能是什么?
编辑:在窗口>管理器中我可以看到此消息:
您的移动设备遇到意外错误(0xE8000001)尝试断开连接并关闭设备电源; 然后打开设备电源并重新连接.
我在断电时重启了它,但我仍然收到了这条消息.
实际上,我认为有一种简单的方法可以实现这一目标.我需要的是纯alpha值信息.为了测试,我有一个50 x 55 px的PNG,在每个边缘,一个5x5像素的矩形是完全透明的.在这些领域中的α必须是0.Everywhere否则它必须是255我做了非常肯定我的PNG正确创建的,它看起来也正常.
请告诉我这是否在理论上是正确的:我创建了一个只有alpha通道的CGImageRef,没有别的.这是通过CGBitmapContextCreate和kCGImageAlphaOnly作为参数完成的.CGBitmapContextGetBitsPerPixel(context)返回1,因此它表明我每个像素只有一个组件:所需的alpha值.我一直在读CGBitmapContextCreate将处理从给定图像到新创建的上下文的所有转换.我的图像之前是带有透明度的PNG-24,但是来自Xcode的pngcrunch似乎以某种方式转换它们.
所以,理论上说:此时我是否有机会获得正确的,无法预测的alpha?我得到的值似乎几乎匹配,但在一个大的5x5透明方块中,我得到的值如19,197,210,0,0,0,98等等.如果它们是真的,我将不得不从图像中看到一些东西.图像本身是纯蓝色.
有时候我写一个浮点数:
0.1
有时我添加一个f,如:
0.1F
通常看来两种方式都有效.我从一些示例代码中选择了f.但实际上有什么用呢?我确定这意味着"漂浮",但我真的需要吗?
我试过这个:
CATransform3D rotationTransform = [[self.layer presentationLayer] transform];
Run Code Online (Sandbox Code Playgroud)
这将不起作用,因为编译器将抛出警告和错误:
警告:找到多个方法"-transform".错误:初始化程序无效.
那么我试过这个:
CATransform3D rotationTransform = [[self.layer presentationLayer] valueForKey:@"transform"];
Run Code Online (Sandbox Code Playgroud)
错误:初始化程序无效.
这有什么问题?
我听说在iPhone项目中使用普通的SQLite3是个坏主意.您使用哪些框架,库,包装器等?哪个值得一看?
我希望用户能够做出一些偏好,如颜色,首选图像等.当我使用NSUserDefaults时,首次启动应用程序时将没有首选项,对吧?所以,每次我想获得喜欢的偏好
NSInteger avatarID =(NSInteger)[[NSUserDefaults standardUserDefaults] objectForKey:@"avatar"];
我必须检查它是否为null,然后使用我的系统首选项.但后来我在文档中看到了这一点:+ resetStandardUserDefaults
在某处保存了两个默认分支吗?来自用户的那些,以及来自开发者的那些?
iphone ×7
cocoa-touch ×6
objective-c ×5
uikit ×5
cocoa ×3
datasource ×1
object ×1
png ×1
png-24 ×1
provisioning ×1
sqlite ×1
variables ×1
xcode ×1