我的代码越多,我就越迷失...所以我决定为我(以及其他人)创建一个完全专注于内存管理的主题,不要浪费时间理解obj-c基础...我会将其更新为问了新问题!
以下是一些例子:
// myArray is property (retain)
myArray = otherArray;
//myArray isn't a property
myArray = otherArray;
//myArray is a property (retain)
myArray = [[NSArray alloc] init];
//myArray isn't a property
myArray = [[NSArray alloc] init];
Run Code Online (Sandbox Code Playgroud)
---所以,如果我明白了......当你把self.myArray放到Xcode上时,你告诉Xcode使用getter或setter,但是当你做myArray时,你对一切负责,对吧?
[求助] UPDATE1:之间是否有区别:
//myArray is a property
myArray = otherArray; // it is only a reference, releasing otherArray will imply releasing myArray
self.myArray = otherArray; // otherArray is sent a retain message so releasing otherArray will still keep myArray in memory
Run Code Online (Sandbox Code Playgroud)
---是的,有区别(见上面的评论)
[已解决] …
如果我有NSArray,我可以把它放到NSDictionary中吗?如果是这样,我该怎么做?
我有一个像这样的plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>highscores</key>
<array>
<dict>
<key>highscoreInSeconds</key>
<string>9</string>
<key>levelName</key>
<string>1</string>
<key>name</key>
<string>Black</string>
</dict>
<dict>
<key>highscoreInSeconds</key>
<string>12</string>
<key>levelName</key>
<string>1</string>
<key>name</key>
<string>Black</string>
</dict>
</array>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
现在我想按此排序highscoreInSeconds.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *plistDirectory = [paths objectAtIndex:0];
NSString* fullPath = [plistDirectory stringByAppendingPathComponent:@"data.plist"];
NSMutableDictionary* pData = [[NSMutableDictionary alloc] initWithContentsOfFile:fullPath];
NSMutableArray* highscores = [pData valueForKey:@"highscores"];
Run Code Online (Sandbox Code Playgroud)
我现在该如何排序?
非常感谢你!:)
祝你今天愉快.
PS:最后看起来应该是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist …Run Code Online (Sandbox Code Playgroud) 我正在阅读的这本书让我写下面的代码:
-(IBAction)displaySomeText:(id)sender {
NSString *cow = @"Milk";
NSString *chicken = @"Egg";
NSString *goat = @"Butter";
NSArray *food = [NSArray arrayWithObjects:cow, chicken, goat, nil];
NSString *string = @"The shopping list is: ";
string = [string stringByAppendingString:[food componentsJoinedByString:@", "]];
[textView insertText:string];
Run Code Online (Sandbox Code Playgroud)
}
我理解数组如何工作,但我需要帮助理解以下代码
string = [string stringByAppendingString:[food componentsJoinedByString:@", "]];
Run Code Online (Sandbox Code Playgroud)
我从来没有见过这样可能的实例.
他让我从NSString课堂上创建一个'字符串'对象,然后我就这样做了
string = [string stringByAppendingString:];
Run Code Online (Sandbox Code Playgroud)
我糊涂了.我从未见过一个示例,我在其中创建一个对象,然后对同一个对象执行一个方法并将其存储在完全相同的对象中.
例如,我知道我可以做到这一点
NSSound *chirp;
chirp = [NSSound soundNamed:@"birdChirp.mp3"];
Run Code Online (Sandbox Code Playgroud)
以上是有道理的,因为我使用了创建的对象并对其执行了类方法.
但我总是认为以下代码的等价物是不可能的
chirp = [chirp methodNameEtc..];
Run Code Online (Sandbox Code Playgroud)
我希望我能很好地解释我的问题.如果不是,我总是可以进一步阐述.
我有两个NSRr数组NSR(使用NSStringFromRect(NSRect)存储).有没有快速的方法来检查并查看数组中的项是否相等或我是否必须循环?因此,数组1中的第1项=数组2中的第1项等.
谢谢
我有一个类型为"餐厅"的阵列,其NSSet为"等级".评级有ID和值.
我想通过ID为01,从高到低的等级对餐厅的数组进行排序.
类似于以下内容,但如何在originalArray上一起使用谓词和排序描述符?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Rating.rating_id=%d", ratingID];
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"currentValue" ascending:YES];
NSArray *sorted = [[originalArray allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];
Run Code Online (Sandbox Code Playgroud) 我想将a(或复制?)NSMutableArray转换为a NSString.我想我的问题是我并不真正了解a的结构NSString.转换后我想将它附加到电子邮件正文中.这是我的代码:
- (IBAction)sendEmail
{
NSLog(@"sendEmail");
[textView resignFirstResponder];
[textView1 resignFirstResponder];
if ([MFMailComposeViewController canSendMail])
{
// set the sendTo address
NSMutableArray *recipients = [[NSMutableArray alloc] initWithCapacity:1];
[recipients addObject:@"example@yahoo.com"];
MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"Iphone Game"];
NSString *string = [string appendString:[NSString stringWithFormat:"%@", [viewArray objectAtIndex:i]]];
[controller setMessageBody:string isHTML:NO];
[controller setToRecipients:recipients];
[self presentModalViewController:controller animated:YES];
[controller release];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
message:@"Your device is not set up for email." delegate:self …Run Code Online (Sandbox Code Playgroud) 在Objective-C中,如何做类似的事情
int array[] = {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)
在纯C?
我需要用尽可能小的开销(代码和/或运行时)来填充NSArray和NSStrings.
我有一个NSMutableArray,它保存了用户高分.我想以数字方式排列项目(数字存储在NSStrings中.)
示例:
4,2,7,8
到
2,4,7,8
如果数据存储在NSStrings中,最简单的方法是什么?
应用程序导航到VC1到VC2,在VC2中"返回","菜单"和"提交"按钮在点击"提交"时显示一条带有消息的警报,单击"确定"按钮时显示"确定"按钮I'我试图弹出到VC1,代码正在执行但导航没有发生.
"返回"和"菜单"按钮也发生了同样的事情,代码正在执行,但没有导航到任何其他页面.使用Xcode 9 beta 6.
我在我的项目中使用的下面一段代码
NSArray *controllersArray = [[self navigationController] viewControllers];
for(UIViewController *controller in controllersArray)
{
if ([controller isKindOfClass:[ViewController1 class]])
{
ViewController1 *accDetailVC = (ViewController1*)controller;
[[self navigationController] popToViewController:accDetailVC animated:YES];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在iOS 11 beta以外的其他iOS版本中工作.如果任何人面临同样的问题,请帮助我.
objective-c uiviewcontroller uinavigationcontroller nsarray ios11
nsarray ×10
objective-c ×7
iphone ×4
nsdictionary ×2
sorting ×2
allocation ×1
cocoa ×1
equals ×1
instance ×1
ios ×1
ios11 ×1
nspredicate ×1
nsstring ×1
retain ×1