__weak在方法的实现签名中使用存储修饰符是否有效?特别是如果它不是方法的公共签名的一部分?例如:
- (UIView *)tableView:(__weak UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionIndex
{
UIView *view = [ABHeaderView view];
view.actionBlock = ^{
[tableView doSomething];
}
// ...
return view;
}
Run Code Online (Sandbox Code Playgroud)
这是否正确tableView用作弱指针?或者我应该真的做一些类似的事情__weak *weakTableView = tableView;并weakTableView在街区内使用?
我没有收到任何警告或错误,并且clang Static Analyzer不会发出任何警告.
memory-management objective-c objective-c-blocks automatic-ref-counting
当我运行Convert to Obj-C时,它首先运行Precheck.我希望Precheck忽略一些文件,我想我可以在这些文件上设置编译器标志-fno-objc-arc.但Precheck阶段似乎忽略了那个标志(并重置它)......所以我真的不知道如何超越Precheck.
我正在使用xcode,这是我的sha512方法:
-(NSString*) sha512:(NSString*)input
{
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:input.length];
uint8_t digest[CC_SHA512_DIGEST_LENGTH];
CC_SHA512(data.bytes, data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x", digest[i]];
}
return output;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试通过输入"测试",则返回:"ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff"它匹配其他SHA512哈希工具(包括我的Java程序和"http://hash.online-convert.com/sha512-generator").
但是,当我输入像"é"这样的非ascii字符时,它会返回与我所有其他sha512工具不同的东西.对于输入"é",我的方法返回:"60313f8521d3016916d876f7ad11cf42a30dfd4ff9bc557f1e2f90e0d37c56b76ab5e42c8a16db20c18086b0d769c08542429c262cc21ee4fba02bfc689a4797"当其他工具(包括一次我的Java程序和"http://hash.online-convert.com/sha512-generator")返回"9e2ad28633f24451bd4f3c1cb20586a21a44c3aeedbdc01b9cc8fa72917ea7bd689c82b8bf1fef89b911cf8cc46fa2c1ccc10087b2094fd4d3350ecd88526a2c".
我错过了什么吗?有关于此的任何想法?谢谢!
我正在寻找一种方法,使用Core Image为现有图像添加纯色边框.我找到了过滤器列表参考,但没有人可以做到.
救命 !!
我正在使用iOS 7解决状态栏问题
if(st.version == 7)
{
CGRect screen = [[UIScreen mainScreen] bounds];
CGRect frame = self.navigationController.view.frame;
frame.origin.y = 20;
frame.size.height = screen.size.height - 20;
self.navigationController.view.frame = frame;
}
Run Code Online (Sandbox Code Playgroud)
因为我正在使用导航控制器并使用导航控制器从一个推送到另一个[self.navigationController pushViewController:newone animated:YES];.它适用于所有视图控制器.但是,如果viewcontroller在xib中有mkmapview,则会出现ios 7的状态栏问题.
如果我删除mapview表单xib并推送到该视图控制器意味着,它就像是,

如果我通过下面的代码添加mapview,
mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 100, 320, 100)];
[self.view addSubview:self.mapView];
Run Code Online (Sandbox Code Playgroud)
看起来像,

怎么解决这个?
在许多关于如何使用块和GCD的指南中,总是提到一个提示:不要在块中保留self.
细节是在定义一个块时,如果你引用self或者我自己的ivar,那么block会保留self.因此,解决方法是使用__block修饰符来获取weakSelf或weakIvar.
但是不这样做有什么害处呢?如果块保留自我,它应该在块完成时释放自我(我是否正确?).因此,最终自我的参考计数是平衡的.我知道如果自我保留了块并且块保留了自身,那么它将是一个保留周期.块和self都将被解除分配.但是如果使用GCD,自我不保留块,为什么不让块保留自己?
这是我的情景.我有一个类A.在它的实现中我创建了类型B的对象并将B的委托设置为self(所以B.delegate = self在A类的实现中的某个地方).
A类有一个实例方法 - (void)printThis;
现在在B的实现中,当我尝试做的时候[delegate printThis];,它给了我这个错误:"没有已知的选择器print的实例方法这个"
当然,这是我启用ARC的时候.上面的委托模式曾经在没有ARC的iOS 4.x中正常工作.当我关掉ARC时它仍然会这样做.ARC与将消息传递给代表有什么关系?
骨架代码:
啊
@class B;
@interface A: blah blah
{
B objB;
}
-(void) printThis;
Run Code Online (Sandbox Code Playgroud)
上午
objB = [[B alloc] init];
objB.delegate = self;
- (void)printThis {
//doSomething
}
Run Code Online (Sandbox Code Playgroud)
BH
@interface B: blah blah
{
//id delegate; //used to be there, now I just property & synthesize
}
@property (nonatomic,weak) id delegate;
Run Code Online (Sandbox Code Playgroud)
BM
@synthesize delegate;
[delegate printThis]; //error with ARC ON, works with OFF
Run Code Online (Sandbox Code Playgroud)
重要编辑:
请注意,这种情况会发生在这里和那里.例如,我在A中有一些其他方法,如printThat等,它们可以正常工作.我对发生的事情毫无头绪!
有没有办法NSJSONSerialization检查是否NSData是有效的JSON?如果API由于某种原因返回无效的JSON,我不希望应用程序出错.
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
Run Code Online (Sandbox Code Playgroud) 我今天将我的XCode从6.2更新到6.3.我适应一切变化迅速,但是当我运行应用程序,我为每一个NIB错误,我尝试加载具有~ipad或~iphone.(无法加载NIB)
没有那个设备修改器的笔尖像往常一样加载.如果我删除了~iphone或者~ipad,可以再次找到笔尖,但显然没有解决方案,因为它是一个通用应用程序.
每个其他文件类型也是如此,我尝试通过代码加载,例如故事板.
所以我的应用程序被发送并被拒绝.他们说它在iOS 5上崩溃了.我仍然是iPhone编程的新手,我在阅读他们发送的崩溃日志时遇到了困难.这说明了崩溃日志.
我们发现您的应用程序在运行iOS 5的iPhone 4上崩溃,这不符合App Store审核指南.
你的应用程序在发布时同时破坏了Wi-Fi和蜂窝网络.
如果你可以给我任何帮助,指导我去哪里看.或者如何能够阅读其中一个我会很感激.除了苹果的解释,如何阅读这些.我发现他们的解释更加令人困惑.
以下是崩溃日志:
Incident Identifier: 797ABD0E-0C64-41C9-9A65-2605C0EC959E
CrashReporter Key: 4ac5bad7693f6fffd20e043218a547ee54565eb3
Hardware Model: iPhone3,1
Process: Stoners Handbook [688]
Path: /var/mobile/Applications/D5E8D62A-D69D-4764-BB2A-0FA692427030/Stoners Handbook.app/Stoners Handbook
Identifier: Stoners Handbook
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2011-10-10 11:04:14.776 -0700
OS Version: iPhone OS 5.0 (9A334)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Last Exception Backtrace:
(0x30fee8bf 0x381931e5 0x30fee7b9 0x30fee7db 0x331fc747 0x331fdbb9 0x33136a45 0x32fc0227 0x32fba313 0x32f88921 0x32f883bf 0x32f87d2d 0x33b73e13 …Run Code Online (Sandbox Code Playgroud)