所以问题是主题问题 - 我想摆脱这个非常烦人的警告.
有没有办法让它保持沉默?
注意:我使用dispatch_get_current_queue()仅用于调试目的.
背景.
请考虑以下步骤:
1)在Xcode中创建一个新的"单视图应用程序".
2)创建一个类别NSObject + Extension.h和.m文件:
// .h
@interface NSObject (Extension)
- (void)someMethod;
@end
// .m
@implementation NSObject (Extension)
- (void)someMethod {
NSLog(@"someMethod was called");
}
@end
Run Code Online (Sandbox Code Playgroud)
3)确保NSObject+Extension.m文件包含在主目标中.
4)将以下行添加到AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[NSString new] performSelector:@selector(someMethod)];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
5)确保应用程序中的任何位置都不存在该#import "NSObject+Extension.h行!
6)运行应用程序.
输出是
2013-08-27 04:12:53.642 Experimental[32263:c07] someMethod was called
Run Code Online (Sandbox Code Playgroud)
问题
我想知道在应用程序的任何地方都没有这个类别的#import ,NSString 如何仍然可以使用NSObject + Extension?这种行为让我对我声明的每个Objective-C类别感觉非常糟糕,因为我希望我声明的类别仅在它们声明的范围内可用.例如,我希望NSObject Extension仅在某个类中扩展,但不能在整个应用程序中扩展,因为否则其全局空间会变为"污染".
有没有办法避免这种行为?我确实希望我的类别仅在我明确导入它们时才能工作,而不是在我将它们链接到我用来运行的目标时.
在MacOS 10.11.3和10.11.4上的xcode 7.3中,当我在任何app委托方法中停止调试器并尝试检查在app委托中实例化的任何对象,甚至是app委托本身时,我在调试器中收到此警告:
error: warning: Stopped in a context claiming to capture an Objective-C object pointer, but 'self' isn't available; pretending we are in a generic context
error: member reference type 'AppDelegate *const' is a pointer; did you mean to use '->'?
error: incomplete definition of type 'AppDelegate'
note: forward declaration of 'AppDelegate'
error: 2 errors parsing expression
Run Code Online (Sandbox Code Playgroud)
这个特定的时间我在app委托中application:didFinishLaunchingWithOptions: method,但在app 代理中的任何方法停止,在运行应用程序的任何时候,在尝试查看任何app delegate的对象时都会出现相同的错误.
xcode 7.2不会发生这种情况.我注意到在7.2中self,app委托被列为(AppDelegate*),而在7.3中它是(AppDelegate*const).单击自定义旁边的显示箭头以显示应用程序委托,但在7.3中没有显示任何内容,而在7.2中则显示.
这是在模拟器和实际设备上.
关于什么可能是错的任何想法?
八月
如何在XCode中找到特定函数的所有调用函数,如eclipse的Call Hierarchy
我想在我的VPS服务器上运行几个(> 2个)基于机架的小应用程序,它已经运行了一个大型Rails应用程序.
Rails应用程序使用传统的"Unicorn + nginx"对,它需要我在VPS机器上拥有的大部分RAM资源.
我已经尝试为每个应用程序添加类似的Unicorn配置,这导致我的RAM资源不足.
所以我的问题是:是否可以设置一个小巧的内存节省服务器,允许一次运行所有Sinatra应用程序?
更新:如果重要,我不太关心性能.这些应用程序不打算做任何严肃的工作.
UPDATE2:基于与Nginx共享的套接字的方法优于具有端口的方法.
谢谢!
我刚刚清楚地解释了" - >"符号的含义:Dot(".")运算符和箭头(" - >")运算符在C与Objective-C中的使用
但我仍然不明白Objective-C中这种表示法的实际用例是什么?
以下是我所说的例子:https://github.com/gnustep/gnustep-base/blob/master/Source/NSOperation.m - 为什么所有这些字符串如internal-> lock都写在那里 - 为什么不只是使用ivars或dot-notation?
有一个常见的习惯用法,比如:
def with clazz, &block
yield clazz
clazz
end
with Hash.new |hash|
hash.merge!{:a => 1}
end
Run Code Online (Sandbox Code Playgroud)
有没有办法进一步定义#with有可能做到:
with Hash.new |hash|
merge!{:a => 1}
end
Run Code Online (Sandbox Code Playgroud)
甚至:
with Hash.new do
merge!{:a => 1}
end
Run Code Online (Sandbox Code Playgroud)
?
UPDATE
后来我偶然发现了我正在寻找的东西(类似于公认的解决方案):http: //blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/19153
更新2
在https://github.com/kristianmandrup/sugar-high中添加到sugar-high/dsl
更新3
Github上的docille项目很好地利用了这个想法.
我在2012年中期开始编写Objective-C语言编程,当时ARC取代MRC作为一般做法,后者几乎不需要学习.
现在,我正在尝试了解MRC的一些基础知识,以加深我对Objective-C中的内存管理的了解.
我现在感兴趣的是如何用手明确地getters/setters声明@properties.
到目前为止,我发现的唯一合理的例子来自Apple的"高级内存管理编程指南":
@interface Counter : NSObject {
NSNumber *_count;
}
@property (nonatomic, retain) NSNumber *count;
@end;
- (NSNumber *)count {
return _count;
}
- (void)setCount:(NSNumber *)newCount {
[newCount retain];
[_count release];
_count = newCount;
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是,为了(非原子,复制),我应该写类似的东西:
- (NSNumber *)count {
return _count;
}
- (void)setCount:(NSNumber *)newCount {
[_count release];
_count = [newCount copy];
}
Run Code Online (Sandbox Code Playgroud)
所以问题是我不确定的其他组合:
我很感谢能够向我展示如何使用手动引用计数(MRC)为以下@property声明编写显式getter/setter的示例:
1. @property (nonatomic, retain) NSNumber *count;
2. @property (nonatomic, copy) NSNumber *count;
3. @property (atomic, retain) NSNumber *count; …Run Code Online (Sandbox Code Playgroud) 我们正在开发基于LLVM的突变测试系统.系统支持使用GoogleTest的C++项目,我正在尝试支持Rust.为此,我们需要完成以下步骤:
挑战是通过LLVM IR API找到单元测试方法.
请考虑以下示例.它有4个测试和一个测试人员功能:
pub fn sum(a: i32, b: i32) -> i32 {
return a + b;
}
pub fn just_print() {
println!("I am just_print() function. I just say hello!");
}
#[test]
fn rusttest_foo_sum1() {
assert!(sum(3, 4) == 7);
}
#[test]
fn rusttest_foo_sum2() {
assert!(sum(4, 5) == 9);
}
#[test]
fn rusttest_foo_sum3() {
assert!(sum(5, 6) == 11);
}
#[test]
fn rusttest_foo_sum4() {
assert!(sum(5, 6) == 11);
}
Run Code Online (Sandbox Code Playgroud)
这是编译此Rust代码时产生 …
如何在代码上从下到上移动视图:
colorView.hidden=NO;
colorView=[[UIView alloc]init];
colorView.frame=CGRectMake(0,480,320, 480);
colorView.bounds=CGRectMake(0,200,320, 280);
colorView.backgroundColor=[UIColor greenColor];
colorView.alpha=1.0f;
[webView addSubview:colorView];
[self.view addSubview:webView];
[self createTransparentView];
Run Code Online (Sandbox Code Playgroud)
那我怎么能在这里添加动画呢?