小编Sam*_*Sam的帖子

如何检测UIView何时改变大小?

我有一个UIViewController用正确的框架初始化,但是在我的代码中,框架被破坏了,我很难找到哪里.

在这种情况下,它通常watch对调试器中的变量很方便,但是我无法在变量视图中访问controller-> view-> frame属性,因为它不是变量,它是一个属性(令人惊讶的是)

在变量显示中钻进UIView显示了一些东西,但我无法与框架相关,我想也许会有,layer但事实并非如此.

有没有办法监视私有API的变化?我猜不是,因为变量基本上是"隐藏的",所以你无法准确指定watch.

或者,我可以使用其他方法吗?我已经尝试了子类化UIView,设置我的UIViewController的视图指向这个子类并打破setFrame方法,但它似乎不起作用.

编辑:子类化UIView方法DID工作,我只需要将视图设置为指向我的测试子类viewDidLoad而不是init方法.让这个问题保持开放,因为我不确定这是否是解决这类问题的最佳方式......

iphone debugging uiviewcontroller uiview

5
推荐指数
2
解决办法
6979
查看次数

clang_complete:iOS的Vim自动完成功能

所以最近我一直在尝试建立一个基于Vim的iOS工作流程.

我找到了clang_complete,并在我的.vimrc中设置了clang用户选项

let g:clang_user_options='-fblocks -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -D__IPHONE_OS_VERSION_MIN_REQUIRED=40300'
Run Code Online (Sandbox Code Playgroud)

如下所述:http://www.zenskg.net/wordpress/?p = 199#comment-229

并添加了一些框架/头/ lib路径.我不会发布整条线,因为它很大.

所以我使用clang命令行(使用相同的选项)测试了我的项目中的一个文件的编译,并且它编译得很好,但只有我使用-arch armv6/7标志.如果我不这样做,它会尝试编译i386并抱怨缺少头文件.

到现在为止还挺好.现在我只使用我给出的完全相同的选项clang,对clang_complete我的.vimrc权利用户选项?

不.当我这样做并尝试在Vim中自动完成一个单词时,它说

 unknown argument: '-arch' 
Run Code Online (Sandbox Code Playgroud)

在Vim的QuickFix列表中.我有点需要这面旗帜 - 我该怎么办?

任何想法都有用.我很想在Vim下完成iOS代码的完成.

vim clang ios clang-complete

5
推荐指数
1
解决办法
2818
查看次数

用于阅读Objective-C的解析器

我想在Objective-C类中生成代码统计信息或简单的可视化.哪些工具可以读取obj-c并提供语义信息,例如"A类扩展B类"或"C是B类属性"?

  • 编译器?(铛)
  • 调试器?(lldb/gdb)
  • 正则表达式?

只是寻找关于这种任务的常用方法的指导.

编辑:我应该说清楚,我现在不是要做更多的工作,而不是简单的类关系.

objective-c

5
推荐指数
1
解决办法
140
查看次数

libclang从游标中获取类名

我试图将一个参数的类名提取到objective-C中的方法调用.我正在解析的代码是:

- (void)testAddConcreteDataModel:(DFDemoDataModelOne*)helpmeh {
    [self.dataModels addObject:helpmeh];
}
Run Code Online (Sandbox Code Playgroud)

我需要的结果是helpmeh类的类型,即"DFDemoDataModelOne".

到目前为止,我有以下代码,其中输出: "[(DFDataModelContainer).dataModels addObject:helpmeh]"

    if (cursor.kind == CXCursor_ObjCMessageExpr) {
        __block NSString* memberName = nil;
        __block NSString* ownerClassName = nil;
        __block NSString* methodName = [NSString stringWithUTF8String:clang_getCString(clang_getCursorDisplayName(cursor))];

        clang_visitChildrenWithBlock(cursor, ^enum CXChildVisitResult(CXCursor cursor, CXCursor parent) {
            if (cursor.kind == CXCursor_MemberRefExpr) {
                memberName = [NSString stringWithUTF8String:clang_getCString(clang_getCursorDisplayName(cursor))];
                ownerClassName = [NSString stringWithUTF8String:clang_getCString(clang_getCursorDisplayName(clang_getCursorSemanticParent(clang_getCursorReferenced(cursor))))];
            } else {
                if (memberName) {
                    NSString* param = [NSString stringWithUTF8String:clang_getCString(clang_getCursorDisplayName(cursor))];
                    NSLog(@"[(%@).%@ %@%@]", ownerClassName, memberName, methodName, param);
                    clang_visitChildrenWithBlock(cursor, ^enum CXChildVisitResult(CXCursor cursor, CXCursor parent) {

                         // test
                         if ([param …
Run Code Online (Sandbox Code Playgroud)

objective-c clang libclang

5
推荐指数
2
解决办法
1454
查看次数

Obj-C,一切的属性

我已经开始在一家新公司工作,而我的团队负责人告诉我要遵守的一条指导原则是很少使用保留/发布,而是依赖于内存管理的属性.我可以看到保持代码清晰并减少错误空间的吸引力,但打开这样的界面让我感到不舒服.一般来说,建筑非常好,但我总是迂腐地把课程关闭到外面的世界.

在Objective-c中使用这样的属性是一种公认​​的设计方法吗?任何人都可以向我提供我的新团队可能已采用此策略的链接或线索吗?

properties objective-c getter-setter

4
推荐指数
1
解决办法
107
查看次数

Objective-C,引用的属性

这可能是iPhone特有的,我不确定.在为模拟器构建时,编译器不会抱怨,但在编译设备时,当我尝试设置对象引用的属性时,它会抛出一些时髦的错误.例如,

@property (nonatomic) CGRect  &finalFrame;
Run Code Online (Sandbox Code Playgroud)

和coressponding合成器

@synthesize finalFrame;
Run Code Online (Sandbox Code Playgroud)

对于声明为的变量

CGRect finalFrame;
Run Code Online (Sandbox Code Playgroud)

给出错误

  • "finalFrame"属性的类型与ivar"finalFrame"的类型不匹配
  • 不可识别的insn:
  • 内部编译器错误:总线错误
  • 内部编译器错误:在extract_insn中,在recog.c:2904

但是,我可以手动执行它,没有问题,使用以下方法:

- (CGRect&)finalFrame;
- (void)setFinalFrame:(CGRect&)aFrame;
Run Code Online (Sandbox Code Playgroud)

这是一个gcc bug吗?它确实为模拟器编译.

iphone gcc objective-c

3
推荐指数
1
解决办法
552
查看次数

在`std :: map`中存储对象时代码崩溃

 typedef std::map<int, MyObject*> MyMap;
 MyMap* myMap = new MyMap;
 // ...
 myMap->insert( MyMap::value_type( 0, objectOfType_MyObject ) );
Run Code Online (Sandbox Code Playgroud)

为什么我的代码会因堆栈跟踪而崩溃

 std::less<int>::operator()
Run Code Online (Sandbox Code Playgroud)

我明白,如果我使用自定义键类,我必须提供一个比较器,但这是一个int.

我之前从未使用过地图,这可能是一个愚蠢的问题,但我现在已经坚持了很久.

谢谢

c++ stl map

2
推荐指数
1
解决办法
5380
查看次数

释放NSArray时将对象设置为nil

当我收到内存警告时,我发布了一堆存储在NSMutableArray中的对象.

[_children release];
Run Code Online (Sandbox Code Playgroud)

我还需要在某些时候通过对象进行递归(可能在发生mem警告之后),所以我需要检查对象是否仍然存在,我与nil进行比较 - 这是不可行的,因为释放了数组不会有任何结果.

我无法循环遍历数组,逐个删除对象并设置为nil,因为我不允许在迭代期间修改数组.

感觉我错过了一些明显的东西.我只想在数组中释放+ nil一些值.

iphone null release objective-c nsmutablearray

1
推荐指数
1
解决办法
1885
查看次数

OpenGL:计算1:1像素比的z值

我的视锥体中有一个256x256纹理,我需要移动到一个z位置,在该位置纹理在ACTUAL大小的屏幕上复制.

到目前为止我所拥有的是:

    const float zForTrueScale = -((itemSize/2) / tanf(DEGREES_TO_RADIANS(fieldOfView/2)) ) * 2;     
Run Code Online (Sandbox Code Playgroud)

其中itemSize是世界空间中纹理的大小(2.0单位).这是为了计算itemSize/2(相反)为1.0时的Z(相邻).我认为这会奏效.

无论我使用何种FOV,该公式都显示纹理始终太小约10%.

谢谢

编辑:我在3D空间中移动图像,需要无缝过渡到正确的z距离.我不能使用orthagonal投影,它必须在视锥体.

opengl math graphics trigonometry

1
推荐指数
1
解决办法
870
查看次数

为什么发布返回(oneway void)但autorelease返回(id)?

如果我这样做 -

SomeObject* someObject = [[SomeObject alloc] init];
[[someObject release] release];
Run Code Online (Sandbox Code Playgroud)

我认为我的程序不会崩溃,因为第二次过度释放没有任何作用.

[[someObject autorelease] autorelease];
Run Code Online (Sandbox Code Playgroud)

会崩溃,因为对象是通过链传递两次释放的.

这只是一个好奇的问题,我想我到目前为止从未遇到任何问题.

objective-c

1
推荐指数
1
解决办法
1348
查看次数