我正在开发一个iPhone应用程序.我有一个类的对象Row需要释放该类的许多对象Block.每个Block当前都有一个保留类的实例变量的属性Row.
@interface Block : UIImageView {
Row *yCoord;
}
@property (nonatomic,retain) Row *yCoord;
@end
Run Code Online (Sandbox Code Playgroud)
每个Row包含NSMutableArray这些块中的一个.
@interface Row : NSObject {
NSMutableArray *blocks;
}
-(void)addBlock:(Block*)aBlock;
@end
@implementation Row
-(void)addBlock:(Block*)aBlock {
[blocks addObject:aBlock];
aBlock.yCoord = self;
}
@end
Run Code Online (Sandbox Code Playgroud)
我知道这是一个循环参考.Apple的文档声明,为了使用循环引用释放对象,我需要一个弱引用而不是一个强引用(一个保留属性),但它没有贯彻并解释我究竟是如何做到的.我计划同时释放和释放一行中的所有块以及行本身.如何在每个块中将弱引用设置为"父"行?
几天来,我一直在反对这个问题,并在网上搜索有关如何解决它的任何提示.如果您喜欢以数学为导向的编程问题,请查看!
考虑n个整数的序列<1 2 3 4 ... n>.由于所有值都是不同的,我们知道有n个阶乘排列.一个排列称为K-转化,如果原来的位置,每一个元素的新位置之间的绝对差为K.由于N和K,你必须找出K-转化排列的总数.
...
输入:第一行输入是整数T(T <20),表示测试用例的数量.每个情况由包含两个整数n和K的行组成(1 <= n <= 10 ^ 9)和(0 <= K <= 3).
输出:对于每种情况,首先输出案例编号,然后输出所需的结果.由于结果可能很大,输出结果模73405.
问题制定者Sohel Hafiz将此问题归类为" Fast Matrix Exponentiation".不幸的是,我在这里链接的谷歌搜索似乎没有显示任何相关的链接,除了维基百科页面厚的数学术语和符号(维基百科已经证明我是任何数学教科书的不良替代品).
这是我到目前为止所做的:
此代码将通过递归计算n和k的低值的K变换排列的数量,但是太复杂.构建一个用于搜索模式的表是很好的:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int permute(int * a, int size, int i, int k)
{
int j;
int total = 0;
int x = size-i;
int low=0;
int high=size;
if (i == 0)
{
/* for (j=0;j<size;j++)
printf("%d, ", a[j]);
printf("\n");
*/ …Run Code Online (Sandbox Code Playgroud) 在一个在线评判编程竞赛问题中,我需要通过标准输出在1秒内输出多达50,000行(除了读取多达200,000对我使用缓冲区的整数).我的逻辑似乎是正确的,但我继续拒绝我的提交超过1秒的运行时间.我删除了我的代码逻辑,只输出一个常量字符串,它仍然超过了时间限制.
有没有比使用System.out.println(String s)每一行输出更快的输出方式?
为了促进良好的编程习惯并提高我的代码效率(阅读:"我的兄弟和我正在争论一些代码"),我向有经验的程序员提出这个问题:
哪个代码块"更好"?对于那些无法阅读代码的人来说,是否值得在for循环中设置一个条件来减少冗余代码的数量而不是将它放在外面并制作2个for循环?这两段代码都有效,问题是效率与可读性.
- (NSInteger)eliminateGroup {
NSMutableArray *blocksToKill = [[NSMutableArray arrayWithCapacity:rowCapacity*rowCapacity] retain];
NSInteger numOfBlocks = (NSInteger)[self countChargeOfGroup:blocksToKill];
Block *temp;
NSInteger chargeTotal = 0;
//Start paying attention here
if (numOfBlocks > 3)
for (NSUInteger i = 0; i < [blocksToKill count]; i++) {
temp = (Block *)[blocksToKill objectAtIndex:i];
chargeTotal += temp.charge;
[temp eliminate];
temp.beenCounted = NO;
}
}
else {
for (NSUInteger i = 0; i < [blocksToKill count]; i++) {
temp = (Block *)[blocksToKill objectAtIndex:i];
temp.beenCounted = NO;
}
}
[blocksToKill …Run Code Online (Sandbox Code Playgroud) 我有一个使用UIViewController在UIWebView中显示文章的应用程序,其中一些有图像.我设置它,以便在单击图像时调用它
- (void)displayImage:(NSInteger)i {
ImageViewController * imageVC = [[ImageViewController alloc] initWithImageId:i];
[self.navigationController pushViewController:imageVC animated:YES];
[imageVC release];
Run Code Online (Sandbox Code Playgroud)
}
这会加载另一个UIViewController.我的所有观点都完全适应轮换.ImageViewController维护图像的比例,我的ArticleViewController用文本填充屏幕.但是,每当我在查看ImageViewController的同时将屏幕旋转到横向模式并按下后退按钮时.以前的UIViewController不正确地自动调整大小,增加了文本的字体大小,而不是在一行上放置更多的单词.
编辑:
这是一个文章视图控制器:

这是单击图像时出现的ImageViewController:

现在如果我们在这里改变方向......

并点击后退按钮,文章内容已被不适当地调整大小以适应窗口.

这可以通过转动iPhone两次来纠正.这是文章在景观中的样子.

该问题与UIWebView在当前不可见时没有适当自动调整有关.我该怎么做才能解决这个问题?
在我的代码中,每次我需要为我的类创建一个新的对象属性时,我通常会将其名称复制/粘贴到4个不同的位置!
NSObject * myObject;)@property()条线@synthesize()实施中的一行dealloc:(当然只针对对象)我这样做是因为它有效,不是因为我完全理解发生了什么.我知道头文件中的声明允许其他类查看其属性,属性说明符确定如何构造其getter/setter方法.合成行实际上构建了那些getter/setter方法.我也知道原始类型应该使用(nonatomic,assign)而不是(nonatomic,retain),但我不知道什么时候我应该省略非原子.
我该怎么做才能避免代码中的冗余.如果我在课堂上更改或添加变量,我必须检查4个不同的地方,并且它变得非常快.有没有任何关键的笔画可以让这个过程更快?我可以简化或组合代码行以获得相同的结果吗?
iphone ×4
objective-c ×4
performance ×2
algorithm ×1
autoresize ×1
conditional ×1
for-loop ×1
io ×1
java ×1
math ×1
permutation ×1
properties ×1