假设我有两个属性定义如下:
@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)
self.parentTableView从init方法调用吗?self也会调用.self即使init方法尚未返回,也可以使用它.)说我有一个对象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:再次搜索该数组的对象?
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值的字典?
不要与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) 假设我有一个已分配和初始化的实例变量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.
我有一个名为的类AbstractBook,它有一个属性:
@property(strong) AbstractPage *page;
Run Code Online (Sandbox Code Playgroud)
现在说我有一个子类AbstractBook叫WhiteBook和子类AbstractPage叫WhitePage.我希望WhiteBook该类继承该page对象,但在这个类中,我希望它是特定的WhitePage类而不是AbstractPage.
所以,WhiteBook我刚刚将该物业重新声明为WhitePage:
@property(strong) WhitePage *page;
Run Code Online (Sandbox Code Playgroud)
但是,我正在收到警告:WhitePage is incompatible with AbstractPage inherited from AbstractBook.实施我的目标的正确方法是什么?
嗯,这似乎很愚蠢,它无法完成 - 您可以设置一个预定义的属性字符串,以显示在带有格式的文本视图上,但您无法设置要应用于实时键入的常规格式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属性.
我有以下类和子类:
@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,并且断言通过.
NSLow不调用的情况下访问子类中的数组实例变量self.array?我有一个算法,我想知道它的作用.我相信你们中的一些人可以看看这个并告诉我它的作用,但我已经看了半个小时了,我仍然不确定.当我尝试玩它时,它会变得混乱.打破像这样的算法你有什么技巧?我如何分析这样的东西,知道发生了什么?
我的猜测是它将数字从最小到最大排序,但我不太确定.
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) 我有一个带有以下构造函数的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)
我已经尝试了一切.我很难想象每次函数调用自己时会发生什么.它重置了吗?或者因为我正在使用+ =,它会在重置之前保存自己吗?我的方法还有什么问题?请帮我理解.
objective-c ×7
ios ×6
iphone ×4
algorithm ×2
cocoa ×2
java ×2
collections ×1
core-text ×1
inheritance ×1
ios6 ×1
pseudocode ×1
python ×1
sorting ×1
tree ×1