使用alloc或autorelease初始化器更好(更快,更高效).例如:
- (NSString *)hello:(NSString *)name {
return [[NSString alloc] initWithFormat:@"Hello, %@", name];
}
Run Code Online (Sandbox Code Playgroud)
要么
- (NSString *)hello:(NSString *)name {
return [NSString stringWithFormat:@"Hello, %@", name];
// return [@"Hello, " stringByAppendingString:name]; // even simpler
}
Run Code Online (Sandbox Code Playgroud)
我知道在大多数情况下,这里的表现无关紧要.但是,我仍然希望养成以更好的方式做这件事的习惯.
如果他们做同样的事情,那么我更喜欢后一种选择,因为它的输入更短,更具可读性.
在Xcode 4.2,有没有办法,看看有什么ARC编译成,也就是说,它把retain,release,autorelease,等?切换到ARC时,此功能非常有用.我知道你不应该考虑这些东西,但它能帮助我弄清楚这些问题的答案.
cocoa cocoa-touch memory-management objective-c automatic-ref-counting
所以我试图在Swift中将实际变量名称作为字符串,但是没有找到方法这样做......或者我可能在一个不好的角度看待这个问题和解决方案.
所以这基本上就是我想做的事情:
var appId: String? = nil
//This is true, since appId is actually the name of the var appId
if( appId.getVarName = "appId"){
appId = "CommandoFurball"
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法在苹果文档中找到任何与此相近的内容,但是:
varobj.self or reflect(var).summary
Run Code Online (Sandbox Code Playgroud)
但是,这给出了变量本身内部或变量类型的信息,在这种情况下是String,我想要变量的实际名称.
使用vararg方法调用始终可以创建NSArrays(和NSDictionaries/NSNumber),例如:
[NSArray arrayWithObjects: @"a", @"b", @"c", nil];
Run Code Online (Sandbox Code Playgroud)
在LLVM和Clang的新改进中,这些是否可以使用内联文字创建?
我有多个操作(它们是AFNetworking请求),其中包含需要一些时间才能执行的完成块,以及需要在所有请求结束时保存的Core Data对象.
MyCoreDataObject *coreDataObject;
AFHTTPRequestOperation *operation1 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation1 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
coreDataObject.attribute1 = responseObject;
sleep(5);
}];
[operation1 start];
AFHTTPRequestOperation *operation2 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation2 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
coreDataObject.attribute2 = responseObject;
sleep(10);
}];
[operation1 operation2];
[context save:nil];
Run Code Online (Sandbox Code Playgroud)
当然,这不是我想要的,因为请求是异步的.我尝试添加NSOperationQueue,如下所示:
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
[operationQueue setMaxConcurrentOperationCount:2];
AFHTTPRequestOperation *operation1 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation1 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
coreDataObject.attribute1 = responseObject;
sleep(5);
}];
[operationQueue addOperation:operation1];
AFHTTPRequestOperation *operation2 = [[AFHTTPRequestOperation alloc] initWithRequest:request1];
[operation2 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation …Run Code Online (Sandbox Code Playgroud) 我有一个NSDictionary来自API服务器的JSON响应.有时候这个字典中的键的值是Null
我试图获取给定的值并将其放入表格单元格的详细文本中以供显示.
问题在于,当我试图将值强制转换NSString为崩溃时,我认为这是因为我试图强制Null转换为字符串.
这样做的正确方法是什么?
我想做的是这样的:
cell.detailTextLabel.text = sensor.objectForKey( "latestValue" ) as NSString
Run Code Online (Sandbox Code Playgroud)
这是一个字典的例子:
Printing description of sensor:
{
"created_at" = "2012-10-10T22:19:50.501-07:00";
desc = "<null>";
id = 2;
"latest_value" = "<null>";
name = "AC Vent Temp";
"sensor_type" = temp;
slug = "ac-vent-temp";
"updated_at" = "2013-11-17T15:34:27.495-07:00";
}
Run Code Online (Sandbox Code Playgroud)
如果我只需要在条件中包装所有这些,那很好.我只是无法弄清楚条件是什么.回到Objective-C世界,我会比较,[NSNull null]但这似乎不适用于Swift.
在Objective-C中,我可以测试给定的类或实例是否响应某些选择器.但是如何查询类或实例的所有方法或类的属性(例如所有方法或属性的列表)?
或者,为什么retainCount我的暑假没有使用
这篇文章的目的是征求关于臭名昭着的方法的原因和原因的详细报道retainCount,以巩固围绕SO的相关信息.*
基础知识:不使用的官方理由是什么retainCount?是否有过任何情况下都当它可能是有用的?应该做些什么?**随意编辑.
历史/解释:如果不打算使用Apple,为什么Apple在NSObject协议中提供此方法?Apple的代码是否依赖于retainCount某些目的?如果是这样,为什么不把它隐藏在某个地方?
为了更深入地理解:对象可能具有与用户代码假设不同的保留计数的原因是什么?您能否举例说明框架代码可能会使用哪些标准程序导致这种差异?是否有任何已知的情况,保留计数总是与新用户可能期望的不同?
你认为还有什么值得关注的retainCount吗?
*不熟悉Objective-C和Cocoa的编码人员经常努力解决或至少误解参考计数方案.教程解释可能提及保留计数,这(根据这些解释)当你打电话上去一个retain,alloc,copy由一个当你调用等,向下release(并在当你调用未来的某一时刻autorelease).
因此,一个崭露头角的可可黑客克里斯可以很容易地认识到,检查一个对象的保留计数对于解决一些内存问题是有用的,而且,有一种方法可用于每个被调用的对象retainCount!克里斯打电话retainCount给几个对象,这个对象太高了,而且这个对象太低了,到底发生了什么?!因此,Kris在SO上发帖,"我的记忆管理出了什么问题?" 然后一群<bold>,<large>字母下降说"不要那样做!你不能依靠结果.",这是好的,但我们的强悍编码器可能需要更深入的解释.
我希望这会变成一个常见问题解答,一个很好的信息论文/讲座的页面,我们的任何专家都倾向于写一个,当他们想知道时可以指出新的可可头retainCount.
**我不想让它过于宽泛,但是经验或有关验证/调试保留和释放配对的文档的具体提示可能适合此处.
***在虚拟代码中; 很明显,一般公众无法访问Apple的实际代码.
什么是Python字节串?
我所能找到的只是关于如何编码为bytestring或解码为ascii或的主题utf-8.我试图了解它是如何工作的.在普通的ASCII字符串中,它是一个数组或字符列表,每个字符代表一个0-255的ASCII值,这就是你知道数字代表什么字符的方式.在Unicode中,它是字符的8或16字节表示,告诉您它是什么字符.
那么什么是字节串?Python如何知道哪些字符代表什么?它是如何在引擎盖下工作的?既然你可以打印甚至返回这些字符串,它会显示字符串表示,我不太明白......
好的,所以我的观点肯定会在这里错过.我被告知这是一个不可变的字节序列,没有任何特殊的解释.
一个字节序列..好吧,让我们说一个字节:
'a'.encode()返回b'a'.
很简单.为什么我能看到一个?
说我得到的ASCII值一个,这样做:
printf "%d" "'a"
它返回97.好的,好的,ASCII字符的整数值a.如果我们将97解释为ASCII,比如在C中char,那么我们得到这封信a.很公平.如果我们将字节表示转换为位,我们得到:
01100001
2 ^ 0 + 2 ^ 5 + 2 ^ 6 = 97.凉.
那么为什么要'a'.encode()返回b'a'而不是01100001??
如果它没有特定的解释,它不应该返回类似的东西b'01100001'吗?
它似乎像ASCII一样解释它.
有人提到它调用__repr__了bytestring,所以它以人类可读的形式显示.但是,即使我做了类似的事情:
with open('testbytestring.txt', 'wb') as f:
f.write(b'helloworld') …Run Code Online (Sandbox Code Playgroud) 你如何在Swift 3.0中表达一个递减的索引循环,其中下面的语法不再有效?
for var index = 10 ; index > 0; index-=1{
print(index)
}
// 10 9 8 7 6 5 4 3 2 1
Run Code Online (Sandbox Code Playgroud) objective-c ×6
ios ×3
swift ×3
cocoa ×2
cocoa-touch ×2
asynchronous ×1
bytestring ×1
clang ×1
decrement ×1
for-loop ×1
httprequest ×1
llvm ×1
nsdata ×1
nsnull ×1
nsstring ×1
python ×1
reflection ×1
retaincount ×1
string ×1