小编Sno*_*man的帖子

从init方法调用方法?

假设我有两个属性定义如下:

@property (nonatomic, strong) UITableView *parentTableView;
@property (nonatomic, strong) NSMutableArray *headersArray;
Run Code Online (Sandbox Code Playgroud)

和方法:

-(void)prepareTags;
Run Code Online (Sandbox Code Playgroud)

并说我有一个像这样的init方法:

-(id)initWithParentTableView:(UITableView*)parentTable
{
    if(self = [super init])
    {
        //1
        NSMutableArray *array = [[NSMutableArray alloc] init];
        headersArray = array;
        //2
        self.parentTableView = parentTable;
        //3
        [self prepareTags];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)
  1. 这是在init方法中设置头数组的正确方法吗?
  2. 我可以self.parentTableView从init方法调用吗?
  3. 我是否允许从init方法调用一个方法(在这种情况下,prepareTags方法self也会调用.self即使init方法尚未返回,也可以使用它.)

iphone objective-c ios

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

在删除之前,我应该检查集合中是否存在对象吗?

说我有一个对象someObject和一个NSMutableArray *someArray.我不确定是否someObject在数组中,但如果是,我想删除它.有两种选择:

情况1:

if([someArray indexOfObject:someObject] != NSNotFound)
   [someArray removeObject:someObject];
Run Code Online (Sandbox Code Playgroud)

案例2:

[someArray removeObject:someObject];
Run Code Online (Sandbox Code Playgroud)

在情况2中,如果数组中不存在该对象,则不会发生任何事情.我的问题是,案例2是否更有效,因为在案例1中我必须搜索数组并查看它是否存在,如果存在,我将其删除,但我猜测removeObject:再次搜索该数组的对象?

collections cocoa objective-c

3
推荐指数
2
解决办法
966
查看次数

将GAE模型转换为JSON

我正在使用此处代码将GAE模型转换为JSON:

def to_dict(self):
    return dict([(p, unicode(getattr(self, p))) for p in self.properties()])
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是如果一个属性没有值,它会将默认字符串设置为"None",这在我的客户端设备(Objective-C)中被解释为实际值,即使它应该被解释为零值.

如何修改上面的代码,同时保持其简洁性以跳过而不将属性写入具有None值的字典?

python google-app-engine

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

NSString constrainedToSize方法?

不要与NSString sizeWithFont返回a 的方法混淆CGSize,我正在寻找的是一种将NSString约束返回到某个特定的方法CGSize.我想这样做的原因是,在绘制文本时Core Text,我可以在字符串的末尾附加一个省略号(...).我知道NSString's drawInRect方法为我做了这个,但我正在使用Core Text,并kCTLineBreakByTruncatingTail截断每行的结尾而不是字符串的结尾.

这种方法,我发现是截断一个字符串,以一定的宽度,而且它并不难改变它,使之成为一个工作CGSize,但该方法对长字符串令人难以置信的速度慢,几乎是不可用的.(截断长字符串花了10多秒).必须有更多的"计算机科学"/数学算法才能更快地完成这项工作.谁敢大胆尝试提出更快的实施?

编辑:我已设法将其转换为二进制算法:

-(NSString*)getStringByTruncatingToSize:(CGSize)size string:(NSString*)string withFont:(UIFont*)font
{
    int min = 0, max = string.length, mid;
    while (min < max) {
        mid = (min+max)/2;

        NSString *currentString = [string substringWithRange:NSMakeRange(min, mid - min)];
        CGSize currentSize = [currentString sizeWithFont:font constrainedToSize:CGSizeMake(size.width, MAXFLOAT)];

        if (currentSize.height < size.height){
            min = mid + 1;
        } else if …
Run Code Online (Sandbox Code Playgroud)

algorithm cocoa objective-c core-text ios

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

从后台线程访问实例变量

假设我有一个已分配和初始化的实例变量MyObject.然后说我这样做:

[backgroundThread performBlock:^{
    //do something with MyObject that might take some time
}];

[self dismissModalViewController]; //this releases all instance variables, right?
Run Code Online (Sandbox Code Playgroud)

所以发生的事情是我有一个NSManagedObjectContext调用backgroundThread,它在后台对一个对象做了一些工作.这会立即返回并在后台执行,然后dismissModalViewController调用,它会释放所有实例变量.那么如果模态视图现在被解除了,但backgroundThread仍然需要使用该对象呢?这是一个问题吗?解决方法是什么?

另一件事:此MyObject被插入到托管对象上下文backgroundThread中.这是否意味着即使在解除视图后,此NSManagedObjectContext仍将保留该对象?

我正在使用ARC.

iphone multithreading objective-c ios

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

objective-c中的子类和继承

我有一个名为的类AbstractBook,它有一个属性:

@property(strong) AbstractPage *page;
Run Code Online (Sandbox Code Playgroud)

现在说我有一个子类AbstractBookWhiteBook和子类AbstractPageWhitePage.我希望WhiteBook该类继承该page对象,但在这个类中,我希望它是特定的WhitePage类而不是AbstractPage.

所以,WhiteBook我刚刚将该物业重新声明为WhitePage:

@property(strong) WhitePage *page;
Run Code Online (Sandbox Code Playgroud)

但是,我正在收到警告:WhitePage is incompatible with AbstractPage inherited from AbstractBook.实施我的目标的正确方法是什么?

iphone objective-c ios

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

在iOS 6中使用格式化键入UITextView

嗯,这似乎很愚蠢,它无法完成 - 您可以设置一个预定义的属性字符串,以显示在带有格式的文本视图上,但您无法设置要应用于实时键入的常规格式UITextView.

例如,如果我在文本视图中输入任何内容之前执行此操作:

NSString *string = @"Hello world";
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.minimumLineHeight = 50.f;
NSMutableAttributedString *aStr = [[NSMutableAttributedString alloc] initWithString:string];
[aStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0,[string length])];
mainTextView.attributedText = aStr;
Run Code Online (Sandbox Code Playgroud)

然后格式化显示,当我用键盘编辑文本时,格式仍然存在.

但是,如果我想从空白开始UITextView并将格式应用于用户将在视图中键入的任何内容,该怎么办?

我试过设置string = @""string = @" ",但这些都没有保留格式.是否真的没有办法将格式应用于用户输入?具有属性字符串属性的UITextView的重点是什么?

根据文档,将完全擦除的text属性设置UITextView为由属性字符串完成的任何格式化.因此无论解决方案是什么,它都不必直接设置textView.text属性,而只是调整attributedText属性.

iphone objective-c nsattributedstring ios ios6

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

在Objective-C中继承属性和合成

我有以下类和子类:

@interface NSHigh : NSObject
@property (nonatomic, strong) NSArray *array;
@end
@implementation NSHigh
-(NSArray*)array
{
    _array = [[NSArray alloc] init];
    return _array;
}
@end

@interface NSLow : NSHigh
@end
@implementation NSLow
/* synthesizing makes the assertion FAIL. NO synthesizing makes the assertion PASS */
@synthesize array;
@end
Run Code Online (Sandbox Code Playgroud)

然后我在某处运行此代码:

NSLow *low = [[NSLow alloc] init];
assert(low.array);
Run Code Online (Sandbox Code Playgroud)

所以,显然,如果在子类中NSLow我合成了数组属性,那么来自超类的getter不会被调用,并且断言失败.

如果我不合成,则调用超类getter,并且断言通过.

  1. 为什么会这样?
  2. 如何在NSLow不调用的情况下访问子类中的数组实例变量self.array

inheritance objective-c ios

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

伪代码/ Java神秘算法

我有一个算法,我想知道它的作用.我相信你们中的一些人可以看看这个并告诉我它的作用,但我已经看了半个小时了,我仍然不确定.当我尝试玩它时,它会变得混乱.打破像这样的算法你有什么技巧?我如何分析这样的东西,知道发生了什么?

我的猜测是它将数字从最小到最大排序,但我不太确定.

1. mystery(a1 , a2 , . . . an : array of real numbers)
    2. k = 1
    3. bk = a1
    4. for i = 2 to n
        5. c = 0
        6. for j = 1 to i ? 1
            7. c = aj + c
        8. if (ai ? c)
            9. k = k + 1
           10. bk = ai
    11. return b1 , b2 , . . . , bk
Run Code Online (Sandbox Code Playgroud)

这是我尝试用Java编写的等价物,但我不确定我是否正确翻译:

public int[] foo(int[] …
Run Code Online (Sandbox Code Playgroud)

java sorting algorithm pseudocode

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

通过树递归计算性别

我有一个带有以下构造函数的Person类:

public Person(String name, int age, char gender, Person c1, Person c2)
Run Code Online (Sandbox Code Playgroud)

其中c1是左子,c2是右子.我想写一个方法来计算与给定性别匹配的人数,M或F:

public int countGender(char gen)
{
    int count=0;
    if (this.gender==gen){
        count++;
    }
    if (child1!=null){
        if (child1.gender==gen){
            count+=1+child1.countGender(gen);
        }
        else count+=child1.countGender(gen);
    }
    if (child2!=null){
        if (child2.gender==gen){
            count+=1+child2.countGender(gen);
        }
        else count+=child2.countGender(gen);
    }
    return count;
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一切.我很难想象每次函数调用自己时会发生什么.它重置了吗?或者因为我正在使用+ =,它会在重置之前保存自己吗?我的方法还有什么问题?请帮我理解.

java tree

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